From: <ken...@us...> - 2009-03-07 08:39:16
|
Revision: 3150 http://planeshift.svn.sourceforge.net/planeshift/?rev=3150&view=rev Author: kennygraunke Date: 2009-03-07 08:39:04 +0000 (Sat, 07 Mar 2009) Log Message: ----------- - Fixes for warnings that showed up on Vornne's platform, but not mine. Thanks! Modified Paths: -------------- trunk/src/server/bulkobjects/activespell.cpp trunk/src/server/bulkobjects/activespell.h trunk/src/server/bulkobjects/buffable.h trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psquestprereqops.h trunk/src/server/bulkobjects/servervitals.h trunk/src/server/gem.h Modified: trunk/src/server/bulkobjects/activespell.cpp =================================================================== --- trunk/src/server/bulkobjects/activespell.cpp 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/activespell.cpp 2009-03-07 08:39:04 UTC (rev 3150) @@ -37,6 +37,7 @@ { public: LinkedSpellCancel(ActiveSpell *linked) : linked(linked) { } + virtual ~LinkedSpellCancel() { } void Cancel() { Modified: trunk/src/server/bulkobjects/activespell.h =================================================================== --- trunk/src/server/bulkobjects/activespell.h 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/activespell.h 2009-03-07 08:39:04 UTC (rev 3150) @@ -45,6 +45,7 @@ class iCancelAction { public: + virtual ~iCancelAction() { } virtual void Cancel() = 0; }; Modified: trunk/src/server/bulkobjects/buffable.h =================================================================== --- trunk/src/server/bulkobjects/buffable.h 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/buffable.h 2009-03-07 08:39:04 UTC (rev 3150) @@ -37,6 +37,7 @@ class iSpellModifier { public: + virtual ~iSpellModifier() { } virtual void Cancel(const ActiveSpell *owner) = 0; }; @@ -69,11 +70,14 @@ class Overridable : public iSpellModifier { public: + Overridable(T x) { values.PushBack(csTuple2<const ActiveSpell*,T>(NULL, x)); } + virtual ~Overridable() { } + T Current() const { return values.Front().second; @@ -148,6 +152,7 @@ public: Buffable() { base = cached = 0; } Buffable(T x) { base = cached = x; } + virtual ~Buffable() { } T Current() const { return cached; } T Base() const { return base; } @@ -213,6 +218,8 @@ { public: Multiplier() { cached = 1; } + virtual ~Multiplier() { } + float Value() { return cached; } void Buff(const ActiveSpell *owner, float x) Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-03-07 08:39:04 UTC (rev 3150) @@ -881,12 +881,12 @@ if ( !rinfo ) return; - attributes[PSITEMSTATS_STAT_STRENGTH] . SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_STRENGTH)); - attributes[PSITEMSTATS_STAT_AGILITY] . SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_AGILITY)); - attributes[PSITEMSTATS_STAT_ENDURANCE] . SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_ENDURANCE)); - attributes[PSITEMSTATS_STAT_INTELLIGENCE].SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_INTELLIGENCE)); - attributes[PSITEMSTATS_STAT_WILL] . SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_WILL)); - attributes[PSITEMSTATS_STAT_CHARISMA] . SetBase(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_CHARISMA)); + attributes[PSITEMSTATS_STAT_STRENGTH] . SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_STRENGTH))); + attributes[PSITEMSTATS_STAT_AGILITY] . SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_AGILITY))); + attributes[PSITEMSTATS_STAT_ENDURANCE] . SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_ENDURANCE))); + attributes[PSITEMSTATS_STAT_INTELLIGENCE].SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_INTELLIGENCE))); + attributes[PSITEMSTATS_STAT_WILL] . SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_WILL))); + attributes[PSITEMSTATS_STAT_CHARISMA] . SetBase(int(rinfo->GetBaseAttribute(PSITEMSTATS_STAT_CHARISMA))); } void psCharacter::SetFamiliarID(PID v) Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-03-07 08:39:04 UTC (rev 3150) @@ -1170,8 +1170,8 @@ /** * The skill level range */ - unsigned int min; - unsigned int max; + int min; + int max; public: /** Modified: trunk/src/server/bulkobjects/servervitals.h =================================================================== --- trunk/src/server/bulkobjects/servervitals.h 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/bulkobjects/servervitals.h 2009-03-07 08:39:04 UTC (rev 3150) @@ -43,6 +43,8 @@ class VitalBuffable : public Buffable<float> { public: + virtual ~VitalBuffable() { } + void Initialize(unsigned int *sDirty, int dirtyF) { statsDirty = sDirty; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2009-03-07 08:19:40 UTC (rev 3149) +++ trunk/src/server/gem.h 2009-03-07 08:39:04 UTC (rev 3150) @@ -111,6 +111,8 @@ { public: OverridableMesh(const csString mesh) : Overridable<csString>(mesh), actor(NULL) { } + virtual ~OverridableMesh() { } + void SetActor(gemActor *act) { actor = act; } protected: virtual void OnChange(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-03-11 23:25:08
|
Revision: 3183 http://planeshift.svn.sourceforge.net/planeshift/?rev=3183&view=rev Author: weltall2 Date: 2009-03-11 23:24:58 +0000 (Wed, 11 Mar 2009) Log Message: ----------- fixed a bug with petition deletion Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2009-03-11 22:31:11 UTC (rev 3182) +++ trunk/src/server/adminmanager.cpp 2009-03-11 23:24:58 UTC (rev 3183) @@ -4856,7 +4856,7 @@ { // Cancellation: type = PETITION_CANCEL; - result = CancelPetition(PETITION_GM, msg.id); + result = CancelPetition(client->GetPID(), msg.id, true); } else if (msg.request == "close") { @@ -5057,13 +5057,13 @@ return rs; } -bool AdminManager::CancelPetition(PID playerID, int petitionID) +bool AdminManager::CancelPetition(PID playerID, int petitionID, bool isGMrequest) { // If player ID is PETITION_GM, just cancel the petition (a GM is requesting the change) if (playerID == PETITION_GM) { - int result = db->CommandPump("UPDATE petitions SET status='Cancelled' WHERE id=%d AND (assigned_gm=-1 OR assigned_gm=%u)", petitionID,playerID.Unbox()); - return (result != -1); + int result = db->CommandPump("UPDATE petitions SET status='Cancelled' WHERE id=%d AND assigned_gm=%u)", petitionID,playerID.Unbox()); + return (result > 0); } // Attempt to select this petition; two things can go wrong: it doesn't exist or the player didn't create it Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2009-03-11 22:31:11 UTC (rev 3182) +++ trunk/src/server/adminmanager.h 2009-03-11 23:24:58 UTC (rev 3183) @@ -445,11 +445,11 @@ /** @brief Cancels the specified petition if the player was its creator * @param playerID: Is the ID of the player who is requesting the change. - * if ID is -1, that means a GM is cancelling someone's petition * @param petitionID: The petition id + * @param isGMrequest: if true that means a GM is cancelling someone's petition * @return Returns either success or failure. */ - bool CancelPetition(PID playerID, int petitionID); + bool CancelPetition(PID playerID, int petitionID, bool isGMrequest = false); /** @brief Changes the description of the specified petition if the player was its creator * @param playerID: Is the ID of the player who is requesting the change. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-14 06:45:46
|
Revision: 3199 http://planeshift.svn.sourceforge.net/planeshift/?rev=3199&view=rev Author: kougaro Date: 2009-03-14 06:45:44 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Changed GetActorPtr(), GetItem(), GetNPCPtr(), GetPetPtr() in gemObject, from virtual functions to wrapping a dynamic_cast to the derived classes Modified Paths: -------------- trunk/src/server/gem.cpp trunk/src/server/gem.h Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-14 02:12:22 UTC (rev 3198) +++ trunk/src/server/gem.cpp 2009-03-14 06:45:44 UTC (rev 3199) @@ -632,8 +632,37 @@ } -const char *gemObject::GetName() +gemItem* gemObject::GetItemPtr() { + return dynamic_cast<gemItem*>(this); +} + +psItem* gemObject::GetItem() +{ + gemItem *itemPtr = GetItemPtr(); + if(itemPtr) + return itemPtr->GetItemData(); + + return NULL; +} + +gemActor* gemObject::GetActorPtr() +{ + return dynamic_cast<gemActor*>(this); +} + +gemNPC* gemObject::GetNPCPtr() +{ + return dynamic_cast<gemNPC*>(this); +} + +gemPet* gemObject::GetPetPtr() +{ + return dynamic_cast<gemPet*>(this); +} + +const char* gemObject::GetName() +{ return name; } @@ -1383,11 +1412,6 @@ zrotangle = this->zRot; } -psItem* gemItem::GetItem() -{ - return itemdata; -} - float gemItem::GetBaseAdvertiseRange() { if (itemdata==NULL) @@ -1397,7 +1421,6 @@ return itemdata->GetVisibleDistance(); } - void gemItem::Send( int clientnum, bool , bool to_superclient) { int flags = 0; @@ -2441,7 +2464,7 @@ psChar->SendStatDRMessage(GetClientID(), eid, 0, InGroup() ? GetGroup() : NULL); } - gemNPC* npc = dynamic_cast<gemNPC*>(this); + gemNPC* npc = GetNPCPtr(); if (npc && npc->GetCharacterData()->IsPet()) { // Get Client ID of Owner @@ -3724,6 +3747,17 @@ psserver->SendSystemError(client->GetClientNum(), "This NPC has nothing to say to you."); } +void gemNPC::SetOwner(gemObject* newOwner) +{ + if (newOwner) + { + this->owner = newOwner; + this->GetCharacterData()->SetOwnerID(newOwner->GetCharacterData()->GetPID()); + } + else + this->owner = NULL; +} + csString gemNPC::GetDefaultBehavior(const csString & dfltBehaviors) { int behNum; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2009-03-14 02:12:22 UTC (rev 3198) +++ trunk/src/server/gem.h 2009-03-14 06:45:44 UTC (rev 3199) @@ -298,12 +298,14 @@ virtual const char* GetObjectType() { return "Object"; } - virtual psItem *GetItem() { return NULL; } - virtual gemActor* GetActorPtr() { return NULL; } - virtual gemNPC* GetNPCPtr() { return NULL; } - virtual gemPet* GetPetPtr() { return NULL; } + gemItem* GetItemPtr(); + gemActor* GetActorPtr(); + gemNPC* GetNPCPtr(); + gemPet* GetPetPtr(); + psItem* GetItem(); virtual psCharacter *GetCharacterData() { return NULL; } + virtual Client* GetClient() const { return NULL; } const char *GetName(); @@ -464,8 +466,9 @@ int clientnum); virtual const char* GetObjectType() { return itemType.GetData(); } - virtual psItem *GetItem(); + psItem* GetItemData() { return itemdata; } + /// iScriptableVar implementation virtual double GetProperty(const char *ptr); virtual double CalcFunction(const char *functionName, const double *params); @@ -708,8 +711,7 @@ virtual ~gemActor(); virtual const char* GetObjectType() { return "Actor"; } - virtual gemActor* GetActorPtr() { return this; } - virtual psCharacter *GetCharacterData() { return psChar; } + virtual psCharacter* GetCharacterData() { return psChar; } virtual Client* GetClient() const; virtual PID GetPID() { return pid; } @@ -957,7 +959,6 @@ virtual ~gemNPC(); virtual const char* GetObjectType() { return "NPC"; } - virtual gemNPC* GetNPCPtr() { return this; } virtual psNPCDialog *GetNPCDialogPtr() { return npcdialog; } virtual Client* GetClient() const { return NULL; } @@ -986,29 +987,12 @@ virtual csString GetDefaultBehavior(const csString & dfltBehaviors); void ShowPopupMenu(Client *client); - virtual void SetTarget(gemObject* target) - { - this->target = target; - }; - virtual gemObject* GetTarget() - { - return this->target; - }; + virtual void SetTarget(gemObject* newTarget) { target = newTarget; } + virtual gemObject* GetTarget() { return this->target; } - virtual void SetOwner(gemObject* owner) - { - if ( owner ) - { - this->owner = owner; - this->GetCharacterData()->SetOwnerID(owner->GetCharacterData()->GetPID()); - } - else - this->owner = NULL; - }; - virtual gemObject* GetOwner() - { - return this->owner; - }; + virtual void SetOwner(gemObject* owner); + + virtual gemObject* GetOwner() { return this->owner; } virtual void SetPosition(const csVector3& pos, float angle, iSector* sector); }; @@ -1026,7 +1010,6 @@ }; virtual const char* GetObjectType() { return "PET"; } - virtual gemPet* GetPetPtr() { return this; } void SetPersistanceLevel( const char *level ) { this->persistanceLevel = level; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-03-18 06:26:46
|
Revision: 3232 http://planeshift.svn.sourceforge.net/planeshift/?rev=3232&view=rev Author: Vengeance2001 Date: 2009-03-18 06:26:37 +0000 (Wed, 18 Mar 2009) Log Message: ----------- Made npc_knowledge_areas row in database unnecessary for the KA which is named after the NPC. This enables quest_scripts to work without needed another row in another table anywhere. The now-redundant rows for specific named KAs in that table are harmless though and can stay. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/bulkobjects/psnpcdialog.h trunk/src/server/chatmanager.cpp trunk/src/server/gem.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-03-18 06:26:37 UTC (rev 3232) @@ -332,6 +332,16 @@ return true; } +bool NPCDialogDict::FindKnowledgeArea(const csString& name) +{ + static csString fallback("not found"); + + csString key(name); + key.Downcase(); // all KAs are supposed to be lowercase + csString temp = knowledgeAreas.Get(key,fallback); + return temp != fallback; +} + bool NPCDialogDict::LoadTriggers(iDataConnection *db) { Debug1(LOG_STARTUP,0,"Loading Triggers...\n"); @@ -373,7 +383,11 @@ delete newtrig; continue; } - + if (!FindKnowledgeArea(newtrig->area)) + { + printf("--------Adding KA: %s\n",newtrig->area.GetDataSafe()); + knowledgeAreas.PutUnique(newtrig->area,newtrig->area); + } } return true; } @@ -795,7 +809,13 @@ return oldtrig; } + if (!FindKnowledgeArea(newtrig->area)) + { + printf("--------Adding KA: %s\n",newtrig->area.GetDataSafe()); + knowledgeAreas.PutUnique(newtrig->area,newtrig->area); + } + return newtrig; } } Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/bulkobjects/dictionary.h 2009-03-18 06:26:37 UTC (rev 3232) @@ -70,6 +70,7 @@ csHash<NpcTrigger> trigger_by_id; BinaryRBTree<NpcResponse> responses; BinaryRBTree<csString> disallowed_words; + csHash<csString,csString> knowledgeAreas; /// Collection of all referenced knowledge areas /// This is a storage area for popup menus parsed during quest loading, which is done before NPCs are spawned. csHash<NpcDialogMenu*,csString> initial_popup_menus; @@ -102,6 +103,8 @@ bool Initialize(iDataConnection *db); + bool FindKnowledgeArea(const csString& name); + /** Returns record of 'term' (or NULL if unknown) */ NpcTerm * FindTerm(const char *term); Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-03-18 06:26:37 UTC (rev 3232) @@ -775,9 +775,13 @@ return false; } -bool psNPCDialog::AddKnowledgeArea(const char *) +bool psNPCDialog::AddKnowledgeArea(const char *ka_name) { - return false; + KnowledgeArea *newKA = new KnowledgeArea; + newKA->area = ka_name; + newKA->priority = 0; // priority only matters when sorting from the db table. here it will always be last priority + knowareas.Push(newKA); + return true; } bool psNPCDialog::AddResponse(const char *area,const char *words,const char *response,const char *minfaction) Modified: trunk/src/server/bulkobjects/psnpcdialog.h =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.h 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/bulkobjects/psnpcdialog.h 2009-03-18 06:26:37 UTC (rev 3232) @@ -185,7 +185,7 @@ bool AddWord(const char *word); bool AddSynonym(const char *word,const char *synonym); - bool AddKnowledgeArea(const char *area); + bool AddKnowledgeArea(const char *ka_name); bool AddResponse(const char *area,const char *words,const char *response,const char *minfaction); bool AssignNPCArea(const char *npcname,const char *areaname); Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/chatmanager.cpp 2009-03-18 06:26:37 UTC (rev 3232) @@ -427,7 +427,13 @@ return npcdlg->Respond(trigger,client); } else - Debug2(LOG_NPC, client->GetClientNum(),"NPC %s cannot speak.\n",npc->GetName() ); // can comment this out later + { + // Admins and GMs can see a better error on the client + if (client->GetSecurityLevel() > 20) + psserver->SendSystemError(client->GetClientNum(),"%s cannot speak.",npc->GetName() ); + + Debug2(LOG_NPC, client->GetClientNum(),"NPC %s cannot speak.\n",npc->GetName() ); + } } return NULL; } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-17 21:12:06 UTC (rev 3231) +++ trunk/src/server/gem.cpp 2009-03-18 06:26:37 UTC (rev 3232) @@ -3617,13 +3617,22 @@ void gemNPC::SetupDialog(PID npcID, bool force) { - if (force || db->SelectSingleNumber("SELECT count(*) FROM npc_knowledge_areas WHERE player_id=%d", npcID.Unbox()) > 0) + if (!force) + force = dict->FindKnowledgeArea(name); // present in Quest Script but not in the queried table + + if (force || db->SelectSingleNumber("SELECT count(*) FROM npc_knowledge_areas WHERE player_id=%d", npcID.Unbox()) > 0) { npcdialog = new psNPCDialog(this); if (!npcdialog->Initialize(db,npcID)) { Error2("Failed to initialize NPC dialog for %s\n", ShowID(npcID)); } + if (force) + { + csString newArea(name); + newArea.Downcase(); + npcdialog->AddKnowledgeArea(newArea); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-03-19 04:16:48
|
Revision: 3235 http://planeshift.svn.sourceforge.net/planeshift/?rev=3235&view=rev Author: kougaro Date: 2009-03-19 04:16:36 +0000 (Thu, 19 Mar 2009) Log Message: ----------- Changed RangeTo, allowing to ignoreInstance, and changed a call so that AL instance is ignored Modified Paths: -------------- trunk/src/server/gem.cpp trunk/src/server/gem.h trunk/src/server/psproxlist.cpp trunk/src/server/psproxlist.h trunk/src/server/psserverchar.cpp Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-18 08:48:02 UTC (rev 3234) +++ trunk/src/server/gem.cpp 2009-03-19 04:16:36 UTC (rev 3235) @@ -768,9 +768,9 @@ } -float gemObject::RangeTo(gemObject* obj, bool ignoreY) +float gemObject::RangeTo(gemObject* obj, bool ignoreY, bool ignoreInstance) { - return proxlist->RangeTo(obj, ignoreY); + return proxlist->RangeTo(obj, ignoreY, ignoreInstance); } bool gemObject::IsUpdateReq (csVector3 const &pos,csVector3 const &oldPos) Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2009-03-18 08:48:02 UTC (rev 3234) +++ trunk/src/server/gem.h 2009-03-19 04:16:36 UTC (rev 3235) @@ -340,7 +340,7 @@ void UpdateProxList( bool force = false); void RemoveFromAllProx(); - float RangeTo(gemObject *obj, bool ignoreY = false); + float RangeTo(gemObject *obj, bool ignoreY = false, bool ignoreInstance = false); virtual bool IsUpdateReq (csVector3 const &pos,csVector3 const &oldPos); Modified: trunk/src/server/psproxlist.cpp =================================================================== --- trunk/src/server/psproxlist.cpp 2009-03-18 08:48:02 UTC (rev 3234) +++ trunk/src/server/psproxlist.cpp 2009-03-19 04:16:36 UTC (rev 3235) @@ -426,14 +426,14 @@ } -float ProximityList::RangeTo( gemObject* object, bool ignoreY ) +float ProximityList::RangeTo( gemObject* object, bool ignoreY, bool ignoreInstance) { #ifdef PSPROXDEBUG CPrintf(CON_DEBUG, "[float ProximityList::RangeTo( gemObject* entity )]\n"); #endif // If in different instances, except for the common 'all' instance, return a very big value. - if (object->GetInstance() != INSTANCE_ALL && self->GetInstance() != INSTANCE_ALL && + if (!ignoreInstance && object->GetInstance() != INSTANCE_ALL && self->GetInstance() != INSTANCE_ALL && object->GetInstance() != self->GetInstance()) { return 9999999.99f; Modified: trunk/src/server/psproxlist.h =================================================================== --- trunk/src/server/psproxlist.h 2009-03-18 08:48:02 UTC (rev 3234) +++ trunk/src/server/psproxlist.h 2009-03-19 04:16:36 UTC (rev 3235) @@ -115,7 +115,7 @@ * Check if an update is required for this object based on moved range and changed instance. */ bool CheckUpdateRequired(); - float RangeTo( gemObject* object, bool ignoreY = false ); + float RangeTo( gemObject* object, bool ignoreY = false, bool ignoreInstance = false ); void DebugDumpContents(csString& out); void ClearTouched(); Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2009-03-18 08:48:02 UTC (rev 3234) +++ trunk/src/server/psserverchar.cpp 2009-03-19 04:16:36 UTC (rev 3235) @@ -213,7 +213,7 @@ // Check range ignoring Y co-ordinate csWeakRef<gemObject> gem = client->GetActor(); - if (gem.IsValid() && gem->RangeTo(realItem, true) > RANGE_TO_SELECT) + if (gem.IsValid() && gem->RangeTo(realItem, true, true) > RANGE_TO_SELECT) { psserver->SendSystemError(client->GetClientNum(), "You are not in range to see %s.",item->GetName()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-03-22 06:25:02
|
Revision: 3274 http://planeshift.svn.sourceforge.net/planeshift/?rev=3274&view=rev Author: Vengeance2001 Date: 2009-03-22 06:24:59 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Added a default double-click behavior for NPCs that are not merchants and who have dialog. Also give the player a message instead of an empty popup menu if the NPC has nothing to say to the player for any quest. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/chatmanager.cpp trunk/src/server/gem.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-03-21 22:30:58 UTC (rev 3273) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-03-22 06:24:59 UTC (rev 3274) @@ -2439,6 +2439,7 @@ psDialogMenuMessage menu; csString currentQuest; + int count = 0; for (size_t i=0; i < counter; i++ ) { @@ -2447,20 +2448,20 @@ if (triggers[i].prerequisite) prereq = triggers[i].prerequisite->GetScript(); - if (!prereq.IsEmpty()) - { - printf("Item %lu Prereq : %s\n", (unsigned long) i, prereq.GetDataSafe()); - } - else - { - printf("Item %lu has no prereqs.\n", (unsigned long) i); - } + //if (!prereq.IsEmpty()) + //{ + // printf("Item %lu Prereq : %s\n", (unsigned long) i, prereq.GetDataSafe()); + //} + //else + //{ + // printf("Item %lu has no prereqs.\n", (unsigned long) i); + //} if (triggers[i].prerequisite) { if (!triggers[i].prerequisite->Check(client->GetCharacterData())) { - printf("Prereq check failed. Skipping.\n"); + //printf("Prereq check failed. Skipping.\n"); continue; } } @@ -2474,7 +2475,7 @@ menu.AddResponse((uint32_t) i, temp, temptrig, "", "", "", "" ); } - + count++; menu.AddResponse((uint32_t) i, triggers[i].menuText, triggers[i].trigger, @@ -2482,9 +2483,16 @@ client->GetCharacterData()->GetRaceInfo()->GetHonorific(), client->GetCharacterData()->GetRaceInfo()->GetPossessive() ); } - menu.BuildMsg(client->GetClientNum()); - - menu.SendMessage(); + + if (count) + { + menu.BuildMsg(client->GetClientNum()); + menu.SendMessage(); + } + else + { + psserver->SendSystemError(client->GetClientNum(), "This NPC has no quest information for you."); + } } void NpcDialogMenu::SetPrerequisiteScript(psQuestPrereqOp *script) Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2009-03-21 22:30:58 UTC (rev 3273) +++ trunk/src/server/chatmanager.cpp 2009-03-22 06:24:59 UTC (rev 3274) @@ -484,6 +484,12 @@ Error2("Audio file '%s' not found.\n", voiceFile); return; } + if (buffer->GetSize() > 63000) // file is too big + { + Error2("Audio file '%s' is too big!\n", voiceFile); + // buffer ref auto release at this return + return; + } csFileTime oTime; psserver->vfs->GetFileTime(voiceFile,oTime); Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-21 22:30:58 UTC (rev 3273) +++ trunk/src/server/gem.cpp 2009-03-22 06:24:59 UTC (rev 3274) @@ -3762,8 +3762,10 @@ csString gemNPC::GetDefaultBehavior(const csString & dfltBehaviors) { int behNum; - if (GetCharacterData()->IsMerchant()) + if (psChar->IsMerchant()) behNum = 2; + else if (GetNPCDialogPtr() != NULL) + return csString("talk"); else if (IsAlive()) behNum = 3; else @@ -3876,6 +3878,8 @@ psserver->usermanager->Attack(actor->GetCharacterData()->getStance("Normal"), actor->GetClient()); else if (msg_id == "loot") psserver->usermanager->Loot(actor->GetClient()); + else if (msg_id == "talk") + ShowPopupMenu(actor->GetClient()); } void gemNPC::AddLootableClient(int cnum) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-03-24 14:22:48
|
Revision: 3300 http://planeshift.svn.sourceforge.net/planeshift/?rev=3300&view=rev Author: weltall2 Date: 2009-03-24 13:34:42 +0000 (Tue, 24 Mar 2009) Log Message: ----------- improved newacct now it autoenables accounts and allows to set optionally a security level (by adding a /[securitylevel]) if not set or invalid it's 0 Modified Paths: -------------- trunk/src/server/cachemanager.cpp trunk/src/server/command.cpp Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-03-24 11:35:19 UTC (rev 3299) +++ trunk/src/server/cachemanager.cpp 2009-03-24 13:34:42 UTC (rev 3300) @@ -2817,7 +2817,8 @@ "username", "password", "last_login_ip", - "security_level" + "security_level", + "status" }; psStringArray fields; @@ -2825,6 +2826,7 @@ fields.Push(ainfo->password); fields.Push(ainfo->lastloginip); fields.FormatPush("%d",ainfo->securitylevel); + fields.Push("A"); //created from server console so auto enabled unsigned int id=db->GenericInsertWithID("accounts",fieldnames,fields); Modified: trunk/src/server/command.cpp =================================================================== --- trunk/src/server/command.cpp 2009-03-24 11:35:19 UTC (rev 3299) +++ trunk/src/server/command.cpp 2009-03-24 13:34:42 UTC (rev 3300) @@ -1014,9 +1014,10 @@ int com_newacct(char *userpass) { char *password; + unsigned long int level = 0; if (!userpass) { - CPrintf(CON_CMDOUTPUT ,"Please specify username/password.\n"); + CPrintf(CON_CMDOUTPUT ,"Please specify username/password[/securitylevel].\n"); return 0; } char *slash = strchr(userpass,'/'); @@ -1027,11 +1028,18 @@ } *slash = 0; // term the user str password=slash+1; + slash = strchr(password,'/'); //used for the level + if(slash != NULL) + { + *slash = 0; // term the pass str + level = strtoul(slash+1, NULL, 0); //aquires the level + } psAccountInfo accountinfo; accountinfo.username = userpass; accountinfo.password = csMD5::Encode(password).HexString(); + accountinfo.securitylevel = level; if (CacheManager::GetSingleton().NewAccountInfo(&accountinfo)==0) { @@ -2430,7 +2438,7 @@ { "importnpc", true, com_importnpc, "Loads NPC data from a XML file or a directory and inserts it into the DB"}, { "loadnpc", true, com_loadnpc, "Loads/Reloads an NPC from the DB into the world"}, { "loadquest", true, com_loadquest, "Loads/Reloads a quest from the DB into the world"}, - { "newacct", true, com_newacct, "Create a new account: newacct <user/passwd>" }, + { "newacct", true, com_newacct, "Create a new account: newacct <user/passwd[/security level]>" }, // { "newguild", com_newguild, "Create a new guild: newguild <name/leader>" }, // { "joinguild", com_joinguild, "Attach player to guild: joinguild <guild/player>" }, // { "quitguild", com_quitguild, "Detach player from guild: quitguild <player>" }, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-03-27 15:28:03
|
Revision: 3331 http://planeshift.svn.sourceforge.net/planeshift/?rev=3331&view=rev Author: KhakiLord Date: 2009-03-27 15:27:49 +0000 (Fri, 27 Mar 2009) Log Message: ----------- Fixed bug in user stat regen event timer. Modified Paths: -------------- trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2009-03-27 13:40:55 UTC (rev 3330) +++ trunk/src/server/usermanager.cpp 2009-03-27 15:27:49 UTC (rev 3331) @@ -1452,14 +1452,12 @@ // Push a new event psUserStatRegeneration* event; - nextUserStatRegeneration += 1000; - event = new psUserStatRegeneration(this,nextUserStatRegeneration); + event = new psUserStatRegeneration(this,csGetTicks() + 1000); psserver->GetEventManager()->Push(event); } void UserManager::Ready() { - nextUserStatRegeneration = csGetTicks(); UserStatRegeneration(); } Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2009-03-27 13:40:55 UTC (rev 3330) +++ trunk/src/server/usermanager.h 2009-03-27 15:27:49 UTC (rev 3331) @@ -473,7 +473,6 @@ // CombatManager *combatmanager; // psServer *server; // AdminManager *adminmanager; - csTicks nextUserStatRegeneration; /// pointer to member function typedef, improves readability typedef void (UserManager::*userCmdPointer)(psUserCmdMessage& msg, Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-03-29 06:14:19
|
Revision: 3346 http://planeshift.svn.sourceforge.net/planeshift/?rev=3346&view=rev Author: Vengeance2001 Date: 2009-03-29 06:14:09 +0000 (Sun, 29 Mar 2009) Log Message: ----------- Added time delay to quest assignments and given items. This will help them sync up better with the dialog going slowly instead of happening instantly. Slight optimization of SendMessageDelayed, so it sends immediately the old way if the specified delay is zero. Took out some debug printfs. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/gem.cpp trunk/src/server/netmanager.cpp trunk/src/server/questmanager.cpp trunk/src/server/questmanager.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-03-29 05:22:27 UTC (rev 3345) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-03-29 06:14:09 UTC (rev 3346) @@ -1901,8 +1901,8 @@ target->GetCharacterData()->GetCharName()); return false; } - - psserver->questmanager->Assign(quest[owner->GetActiveQuest()],target,who); + timeDelay += 1000; + psserver->questmanager->Assign(quest[owner->GetActiveQuest()],target,who,timeDelay); return true; } @@ -2081,11 +2081,17 @@ csString itemName = item->GetQuantityName(); - psserver->SendSystemInfo(target->GetClientNum(), "You have received %s.", itemName.GetData()); if (!character->Inventory().AddOrDrop(item)) - psserver->SendSystemError(target->GetClientNum(), "You received %s, but dropped it because you can't carry any more.", itemName.GetData()); - + { + psSystemMessage recv(target->GetClientNum(),MSG_ERROR,"You received %s, but dropped it because you can't carry any more.", itemName.GetData()); + psserver->GetNetManager()->SendMessageDelayed(recv.msg, timeDelay); + } + else + { + psSystemMessage recv(target->GetClientNum(),MSG_INFO,"You have received %s.", itemName.GetData()); + psserver->GetNetManager()->SendMessageDelayed(recv.msg, timeDelay); + } return true; } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-03-29 05:22:27 UTC (rev 3345) +++ trunk/src/server/gem.cpp 2009-03-29 06:14:09 UTC (rev 3346) @@ -3731,12 +3731,12 @@ // If the quest is completed or the last response was not from this NPC, then skip if (quests[i]->last_response_from_npc_pid != pid || quests[i]->status == 'C') { - printf("Skipping completed or irrelevant quest: %s\n", q->GetName() ); + // printf("Skipping completed or irrelevant quest: %s\n", q->GetName() ); continue; } - printf("Checking quest %lu: %s. ", (unsigned long) i, q->GetName() ); + // printf("Checking quest %lu: %s. ", (unsigned long) i, q->GetName() ); int last_response = quests[i]->last_response; - printf("Got last response %d\n", last_response); + // printf("Got last response %d\n", last_response); if (last_response != -1) // within a quest step { @@ -3745,7 +3745,7 @@ } else { - printf("Got last_response==-1 for quest %lu.\n", (unsigned long) i); + // printf("Got last_response==-1 for quest %lu.\n", (unsigned long) i); } } Modified: trunk/src/server/netmanager.cpp =================================================================== --- trunk/src/server/netmanager.cpp 2009-03-29 05:22:27 UTC (rev 3345) +++ trunk/src/server/netmanager.cpp 2009-03-29 06:14:09 UTC (rev 3346) @@ -384,10 +384,17 @@ bool NetManager::SendMessageDelayed(MsgEntry *me, csTicks delay) { - printf("Sending delayed message %d msec from now.\n", delay); - DelayedMessageSendEvent *event = new DelayedMessageSendEvent(delay,me); - psserver->GetEventManager()->Push(event); - return true; + if (delay) + { + printf("Sending delayed message %d msec from now.\n", delay); + DelayedMessageSendEvent *event = new DelayedMessageSendEvent(delay,me); + psserver->GetEventManager()->Push(event); + return true; + } + else + { + return SendMessage(me); + } } bool NetManager::SendMessage(MsgEntry* me) Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-03-29 05:22:27 UTC (rev 3345) +++ trunk/src/server/questmanager.cpp 2009-03-29 06:14:09 UTC (rev 3346) @@ -1244,12 +1244,16 @@ return true; } -void QuestManager::Assign(psQuest *quest, Client *who,gemNPC *assigner) +void QuestManager::Assign(psQuest *quest, Client *who,gemNPC *assigner,csTicks timeDelay) { who->GetActor()->GetCharacterData()->AssignQuest(quest, assigner->GetPID()); - psserver->SendSystemOK(who->GetClientNum(),"You got a quest!"); - psserver->SendSystemInfo(who->GetClientNum(),"You now have the %s quest.",quest->GetName() ); + psSystemMessage okmsg(who->GetClientNum() ,MSG_OK, "You got a quest!"); + psSystemMessage newmsg(who->GetClientNum(),MSG_INFO, "You now have the %s quest.",quest->GetName() ); + + psserver->GetNetManager()->SendMessageDelayed(okmsg.msg,timeDelay); + psserver->GetNetManager()->SendMessageDelayed(newmsg.msg,timeDelay); + // Post tutorial event psGenericEvent evt(who->GetClientNum(), psGenericEvent::QUEST_ASSIGN); evt.FireEvent(); Modified: trunk/src/server/questmanager.h =================================================================== --- trunk/src/server/questmanager.h 2009-03-29 05:22:27 UTC (rev 3345) +++ trunk/src/server/questmanager.h 2009-03-29 06:14:09 UTC (rev 3346) @@ -119,7 +119,7 @@ virtual void HandleMessage(MsgEntry *pMsg,Client *client) { } - void Assign(psQuest *quest, Client *who, gemNPC *assigner); + void Assign(psQuest *quest, Client *who, gemNPC *assigner,csTicks timeDelay=0); bool Complete(psQuest *quest, Client *who); void OfferRewardsToPlayer(Client *who, csArray<psItemStats*> &offer,csTicks& timeDelay); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-03-30 12:22:07
|
Revision: 3355 http://planeshift.svn.sourceforge.net/planeshift/?rev=3355&view=rev Author: KhakiLord Date: 2009-03-30 12:21:49 +0000 (Mon, 30 Mar 2009) Log Message: ----------- Remove unnecessary fields when updating account info in DB. Modified Paths: -------------- trunk/src/server/cachemanager.cpp trunk/src/server/cachemanager.h Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-03-30 12:09:35 UTC (rev 3354) +++ trunk/src/server/cachemanager.cpp 2009-03-30 12:21:49 UTC (rev 3355) @@ -2786,8 +2786,6 @@ bool CacheManager::UpdateAccountInfo(psAccountInfo *ainfo) { const char *fieldnames[]= { - "username", - "password", "last_login_ip", "security_level", "last_login" @@ -2795,8 +2793,6 @@ char accountidstring[11]; psStringArray fields; - fields.Push(ainfo->username); - fields.Push(ainfo->password); fields.Push(ainfo->lastloginip); fields.FormatPush("%d",ainfo->securitylevel); fields.Push(ainfo->lastlogintime); Modified: trunk/src/server/cachemanager.h =================================================================== --- trunk/src/server/cachemanager.h 2009-03-30 12:09:35 UTC (rev 3354) +++ trunk/src/server/cachemanager.h 2009-03-30 12:21:49 UTC (rev 3355) @@ -229,7 +229,7 @@ */ psAccountInfo *GetAccountInfoByUsername(const char *username); - /** Call to store modified account information back to the database. + /** Call to store modified account information back to the database. Updates IP, security level and last login time. * * @param ainfo - A pointer to account data to store. * @return true - success false - failed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-04-06 23:05:29
|
Revision: 3408 http://planeshift.svn.sourceforge.net/planeshift/?rev=3408&view=rev Author: Vengeance2001 Date: 2009-04-06 23:05:24 +0000 (Mon, 06 Apr 2009) Log Message: ----------- Fixed chained response popups so they don't display until after the npc has finished responding. This prevents confusion and keeps multiple responses from overlapping. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/chatmanager.cpp trunk/src/server/gem.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2009-04-06 17:20:35 UTC (rev 3407) +++ trunk/src/server/bulkobjects/dictionary.cpp 2009-04-06 23:05:24 UTC (rev 3408) @@ -1430,7 +1430,7 @@ return false; } -bool NpcResponse::ExecuteScript(gemActor *player, gemNPC* target) +csTicks NpcResponse::ExecuteScript(gemActor *player, gemNPC* target) { timeDelay = 0; // Say commands, etc. should be delayed by 2-3 seconds to simulate typing @@ -1442,10 +1442,10 @@ csString resp = script[i]->GetResponseScript(); Error3("Error running script in %s operation for client %s.", resp.GetData(), player->GetClient() ? player->GetClient()->GetName() : "NPC"); - return false; + return SIZET_NOT_FOUND; } } - return true; + return timeDelay; } csString NpcResponse::GetResponseScript() @@ -2463,7 +2463,7 @@ printf("Added %lu triggers to menu.\n", (unsigned long) add->triggers.GetSize()); } -void NpcDialogMenu::ShowMenu( Client *client ) +void NpcDialogMenu::ShowMenu(Client *client,csTicks delay) { if( client == NULL ) return; @@ -2519,7 +2519,7 @@ if (count) { menu.BuildMsg(client->GetClientNum()); - menu.SendMessage(); + psserver->GetNetManager()->SendMessageDelayed(menu.msg, delay); } else { Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2009-04-06 17:20:35 UTC (rev 3407) +++ trunk/src/server/bulkobjects/dictionary.h 2009-04-06 23:05:24 UTC (rev 3408) @@ -327,7 +327,7 @@ void AddTrigger( const csString &menuText, const csString &trigger, psQuest *quest, psQuestPrereqOp *script=NULL ); void Add( NpcDialogMenu *add); - void ShowMenu( Client *client ); + void ShowMenu(Client *client,csTicks delay); void SetPrerequisiteScript(psQuestPrereqOp *script); }; @@ -374,7 +374,11 @@ /// Check for SayResponseOp with public flag set, which tells chat whether it is public or private. bool HasPublicResponse(); bool ParseResponseScript(const char *xmlstr,bool insertBeginning=false); - bool ExecuteScript(gemActor *player, gemNPC* target); + + /** + * Returns SIZET_NOT_FOUND (-1) if it fails, or csTicks of response duration if successful + */ + csTicks ExecuteScript(gemActor *player, gemNPC* target); csString GetResponseScript(); // This is used so that the popup menu and the subsequent response can share the same filtering criteria Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-04-06 17:20:35 UTC (rev 3407) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2009-04-06 23:05:24 UTC (rev 3408) @@ -673,9 +673,6 @@ currentClient->GetCharacterData()->SetAssignedQuestLastResponse(resp->quest,resp->id, currentClient->GetTargetObject() ); } - if( resp->menu ) - resp->menu->ShowMenu(currentClient); - return resp; // Found what we are looking for } else Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2009-04-06 17:20:35 UTC (rev 3407) +++ trunk/src/server/chatmanager.cpp 2009-04-06 23:05:24 UTC (rev 3408) @@ -177,7 +177,9 @@ if (resp) { SendMultipleAudioFileHashes(client, resp->GetVoiceFile()); - resp->ExecuteScript(client->GetActor(), targetnpc); + csTicks delay = resp->ExecuteScript(client->GetActor(), targetnpc); + if (delay != SIZET_NOT_FOUND && resp->menu ) + resp->menu->ShowMenu(client, delay); } break; } Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2009-04-06 17:20:35 UTC (rev 3407) +++ trunk/src/server/gem.cpp 2009-04-06 23:05:24 UTC (rev 3408) @@ -3822,7 +3822,7 @@ menu.Add(npcmenu); if (menu.triggers.GetSize()) - menu.ShowMenu(client); + menu.ShowMenu(client,0); else psserver->SendSystemError(client->GetClientNum(), "This NPC has nothing to say to you."); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ven...@us...> - 2009-04-08 23:34:22
|
Revision: 3417 http://planeshift.svn.sourceforge.net/planeshift/?rev=3417&view=rev Author: Vengeance2001 Date: 2009-04-08 23:34:19 +0000 (Wed, 08 Apr 2009) Log Message: ----------- Initial fix of autogive of money to npc's from popup menus. Includes message faking voodoo which should not be repeated by prospects. :-) Modified Paths: -------------- trunk/src/server/exchangemanager.cpp trunk/src/server/questmanager.cpp Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2009-04-07 22:24:50 UTC (rev 3416) +++ trunk/src/server/exchangemanager.cpp 2009-04-08 23:34:19 UTC (rev 3417) @@ -1571,6 +1571,14 @@ // Now execute the exchange if all items were found if (exchangeSlot == itemCount) // successfully added everything to the exchange { + // Now parse the money attribute here and add any money found to the exchange + psMoney money(topNode->GetAttributeValue("money")); + if (money.GetTotal() > 0) + { + psSlotMovementMsg msg(CONTAINER_INVENTORY_MONEY,MONEY_TRIAS,CONTAINER_EXCHANGE_OFFERING,MONEY_TRIAS,money.GetTotal() ); + msg.msg->clientnum = client->GetClientNum(); // must set this before publishing + msg.FireEvent(); + } HandleExchangeAccept(NULL, client); } } Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-04-07 22:24:50 UTC (rev 3416) +++ trunk/src/server/questmanager.cpp 2009-04-08 23:34:19 UTC (rev 3417) @@ -261,6 +261,7 @@ { pending_triggers.Empty(); pending_triggers.Push(itemlist); // next response will use this itemlist + printf("Got player action of: %s\n", itemlist.GetDataSafe() ); } else return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-16 11:44:56
|
Revision: 3483 http://planeshift.svn.sourceforge.net/planeshift/?rev=3483&view=rev Author: weltall2 Date: 2009-04-16 11:44:46 +0000 (Thu, 16 Apr 2009) Log Message: ----------- removed a quest tester check which shouldn't have been here anymore added Require (not) equipped (itemname) Require (not) possessed (itemname) quest syntax operators (try to unsheat your sword :P) Modified Paths: -------------- trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-04-16 04:36:38 UTC (rev 3482) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-04-16 11:44:46 UTC (rev 3483) @@ -587,8 +587,6 @@ { if(character->GetActor()) { - if(character->GetActor()->questtester) - return true; if(character->GetActor()->GetClient()) { if(type == "min") Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-04-16 04:36:38 UTC (rev 3482) +++ trunk/src/server/questmanager.cpp 2009-04-16 11:44:46 UTC (rev 3483) @@ -534,6 +534,26 @@ { response_requireop.AppendFmt("<not><married /></not>"); } + else if (!strncasecmp(block,"Require equipped",16)) + { + csString itemName = block.Slice(17,block.Length()).Trim(); + response_requireop.AppendFmt("<item inventory=\"false\" name=\"%s\" />", itemName.GetData()); + } + else if (!strncasecmp(block,"Require not equipped",20)) + { + csString itemName = block.Slice(21,block.Length()).Trim(); + response_requireop.AppendFmt("<not><item inventory=\"false\" name=\"%s\" /></not>",itemName.GetData()); + } + else if (!strncasecmp(block,"Require possessed",17)) + { + csString itemName = block.Slice(18,block.Length()).Trim(); + response_requireop.AppendFmt("<item inventory=\"true\" name=\"%s\" />", itemName.GetData()); + } + else if (!strncasecmp(block,"Require not possessed",21)) + { + csString itemName = block.Slice(22,block.Length()).Trim(); + response_requireop.AppendFmt("<not><item inventory=\"true\" name=\"%s\" /></not>",itemName.GetData()); + } else if (!strncasecmp(block,"Introduce",9)) { csString charname = block.Slice(10).Trim(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-20 13:59:10
|
Revision: 3512 http://planeshift.svn.sourceforge.net/planeshift/?rev=3512&view=rev Author: weltall2 Date: 2009-04-20 13:51:37 +0000 (Mon, 20 Apr 2009) Log Message: ----------- Added category checking to the item prerequisite operator eg: <item inventory="false" category="Weapon" /> Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/bulkobjects/psquest.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psquestprereqops.h trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-04-20 13:51:37 UTC (rev 3512) @@ -51,6 +51,7 @@ #include "psglyph.h" #include "psguildinfo.h" #include "adminmanager.h" +#include "psmerchantinfo.h" psCharacterInventory::psCharacterInventory(psCharacter *ownr) { @@ -839,6 +840,17 @@ return false; } +bool psCharacterInventory::hasItemCategory(csString & categoryname, bool includeBulk) +{ + for (size_t i=1; i < inventory.GetSize(); i++) + { + if (inventory[i].item && inventory[i].item->GetCategory()->name == categoryname && + (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-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/bulkobjects/pscharinventory.h 2009-04-20 13:51:37 UTC (rev 3512) @@ -219,6 +219,13 @@ * @return The item in the given slot. NULL if no item was found. */ bool hasItemName(csString & itemname, bool includeBulk); + + /** Check if the item of a certain category is in the character inventory. + * @param categoryname The name of the category of 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 hasItemCategory(csString & categoryname, 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/psquest.cpp =================================================================== --- trunk/src/server/bulkobjects/psquest.cpp 2009-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/bulkobjects/psquest.cpp 2009-04-20 13:51:37 UTC (rev 3512) @@ -349,15 +349,16 @@ else if ( strcmp( topNode->GetValue(), "item" ) == 0 ) { csString name = topNode->GetAttributeValue("name"); - if (name.IsEmpty()) + csString category = topNode->GetAttributeValue("category"); + if (name.IsEmpty() && category.IsEmpty()) { - Error1("No name given for item prerequisite operation"); + Error1("No name or category given for item prerequisite operation"); return false; } bool includeInventory = topNode->GetAttributeValueAsBool("position", false); - prerequisite.AttachNew(new psQuestPrereqOpItem(name,includeInventory)); + prerequisite.AttachNew(new psQuestPrereqOpItem(name, category, includeInventory)); } else if ( strcmp( topNode->GetValue(), "activemagic" ) == 0 ) { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2009-04-20 13:51:37 UTC (rev 3512) @@ -356,22 +356,29 @@ bool psQuestPrereqOpItem::Check(psCharacter * character) { - return character->Inventory().hasItemName(itemName, includeInventory); + if(!categoryName.IsEmpty()) + return character->Inventory().hasItemCategory(categoryName, includeInventory); + if(!itemName.IsEmpty()) + return character->Inventory().hasItemName(itemName, includeInventory); } csString psQuestPrereqOpItem::GetScriptOp() { csString script; - script.Format("<item inventory=\"%s\" name=\"%s\"/>", includeInventory? "true" : "false", itemName.GetData()); - + script.Format("<item inventory=\"%s\" ", includeInventory? "true" : "false"); + if(!itemName.IsEmpty()) + script.AppendFmt("name=\"%s\" ", itemName.GetData()); + if(!categoryName.IsEmpty()) + script.AppendFmt("category=\"%s\" ", categoryName.GetData()); + script.Append("/>"); return script; } csPtr<psQuestPrereqOp> psQuestPrereqOpItem::Copy() { csRef<psQuestPrereqOpItem> copy; - copy.AttachNew(new psQuestPrereqOpItem(itemName,includeInventory)); + copy.AttachNew(new psQuestPrereqOpItem(itemName,categoryName,includeInventory)); return csPtr<psQuestPrereqOp>(copy); } Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2009-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2009-04-20 13:51:37 UTC (rev 3512) @@ -611,6 +611,7 @@ { protected: csString itemName; + csString categoryName; bool includeInventory; public: @@ -622,7 +623,7 @@ * else only inventory. * @param name The name of the base item we are searching for. */ - psQuestPrereqOpItem(const char *itemName, bool includeInventory):itemName(itemName),includeInventory(includeInventory){}; + psQuestPrereqOpItem(const char *itemName, const char *category, bool includeInventory):itemName(itemName),categoryName(categoryName),includeInventory(includeInventory){}; virtual ~psQuestPrereqOpItem() {} Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2009-04-20 13:48:36 UTC (rev 3511) +++ trunk/src/server/questmanager.cpp 2009-04-20 13:51:37 UTC (rev 3512) @@ -537,22 +537,58 @@ else if (!strncasecmp(block,"Require equipped",16)) { csString itemName = block.Slice(17,block.Length()).Trim(); - response_requireop.AppendFmt("<item inventory=\"false\" name=\"%s\" />", itemName.GetData()); + //this manages the category argument Require equipped category xxxx + if(itemName.StartsWith("category") + { + csString categoryName = itemName.Slice(9, itemName.Length()); //no need to trim done above + response_requireop.AppendFmt("<item inventory=\"false\" category=\"%s\" />", categoryName.GetData()); + } + else + { + response_requireop.AppendFmt("<item inventory=\"false\" name=\"%s\" />", itemName.GetData()); + } } else if (!strncasecmp(block,"Require not equipped",20)) { csString itemName = block.Slice(21,block.Length()).Trim(); - response_requireop.AppendFmt("<not><item inventory=\"false\" name=\"%s\" /></not>",itemName.GetData()); + //this manages the category argument Require equipped category xxxx + if(itemName.StartsWith("category") + { + csString categoryName = itemName.Slice(9, itemName.Length()); //no need to trim done above + response_requireop.AppendFmt("<not><item inventory=\"false\" category=\"%s\" /></not>", categoryName.GetData()); + } + else + { + response_requireop.AppendFmt("<not><item inventory=\"false\" name=\"%s\" /></not>",itemName.GetData()); + } } else if (!strncasecmp(block,"Require possessed",17)) { csString itemName = block.Slice(18,block.Length()).Trim(); - response_requireop.AppendFmt("<item inventory=\"true\" name=\"%s\" />", itemName.GetData()); + //this manages the category argument Require equipped category xxxx + if(itemName.StartsWith("category") + { + csString categoryName = itemName.Slice(9, itemName.Length()); //no need to trim done above + response_requireop.AppendFmt("<item inventory=\"true\" category=\"%s\" />", categoryName.GetData()); + } + else + { + response_requireop.AppendFmt("<item inventory=\"true\" name=\"%s\" />",itemName.GetData()); + } } else if (!strncasecmp(block,"Require not possessed",21)) { csString itemName = block.Slice(22,block.Length()).Trim(); - response_requireop.AppendFmt("<not><item inventory=\"true\" name=\"%s\" /></not>",itemName.GetData()); + //this manages the category argument Require equipped category xxxx + if(itemName.StartsWith("category") + { + csString categoryName = itemName.Slice(9, itemName.Length()); //no need to trim done above + response_requireop.AppendFmt("<not><item inventory=\"true\" category=\"%s\" /></not>", categoryName.GetData()); + } + else + { + response_requireop.AppendFmt("<not><item inventory=\"true\" name=\"%s\" /></not>",itemName.GetData()); + } } else if (!strncasecmp(block,"Introduce",9)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-23 12:16:07
|
Revision: 3529 http://planeshift.svn.sourceforge.net/planeshift/?rev=3529&view=rev Author: weltall2 Date: 2009-04-23 12:15:59 +0000 (Thu, 23 Apr 2009) Log Message: ----------- made rankneeded in the repair process a math script Modified Paths: -------------- trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-23 07:48:28 UTC (rev 3528) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-04-23 12:15:59 UTC (rev 3529) @@ -118,6 +118,8 @@ INSERT INTO math_scripts VALUES( "LootModifierCostCap", "ModCap = MaxHP*10;"); +INSERT INTO math_scripts VALUES( "Calculate Repair Rank","Result = if(Object:SalePrice > 300,Object:SalePrice/150,0);"); + INSERT INTO math_scripts VALUES( "Calculate Repair Time", " Result = Object:SalePrice/100; Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-23 07:48:28 UTC (rev 3528) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-23 12:15:59 UTC (rev 3529) @@ -1151,7 +1151,11 @@ UPDATE `server_options` SET `option_value`='1217' WHERE `option_name`='db_version'; +#### added a new math script Calculate Repair Rank, removing so the hardcoded script +INSERT INTO math_scripts VALUES( "Calculate Repair Rank","Result = if(Object:SalePrice > 300,Object:SalePrice/150,0);"); + + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-23 07:48:28 UTC (rev 3528) +++ trunk/src/server/workmanager.cpp 2009-04-23 12:15:59 UTC (rev 3529) @@ -126,11 +126,16 @@ psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleWorkCommand),MSGTYPE_WORKCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleLockPick),MSGTYPE_LOCKPICK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGET); + calc_repair_rank = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Rank"); calc_repair_time = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Time"); calc_repair_result = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Result"); calc_mining_chance = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Odds"); calc_lockpick_time = psserver->GetMathScriptEngine()->FindScript("Lockpicking Time"); + if (!calc_repair_rank) + { + Error1("Could not find mathscript 'Calculate Repair Rank'"); + } if (!calc_repair_time) { Error1("Could not find mathscript 'Calculate Repair Time'"); @@ -355,10 +360,14 @@ } // Calculate if current skill is enough to repair the item - int rankneeded = repairTarget->GetPrice().GetTotal() / 150; - // if the item is low cost, allow people to try repair anyway - if (repairTarget->GetPrice().GetTotal()<300) - rankneeded = 0; + int rankneeded; + { + MathEnvironment env; + env.Define("Object", repairTarget); + calc_repair_rank->Evaluate(&env); + rankneeded = env.Lookup("Result")->GetValue(); + } + int skillid = repairTarget->GetBaseStats()->GetCategory()->repairSkillId; int repairskillrank = client->GetCharacterData()->Skills().GetSkillRank(PSSKILL(skillid)).Current(); if (repairskillrank<rankneeded) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-04-23 17:09:32
|
Revision: 3531 http://planeshift.svn.sourceforge.net/planeshift/?rev=3531&view=rev Author: kougaro Date: 2009-04-23 17:09:23 +0000 (Thu, 23 Apr 2009) Log Message: ----------- There were two RNGs in psserver, including one that was not used. merged the both of them Modified Paths: -------------- trunk/src/server/psserver.cpp trunk/src/server/psserver.h Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2009-04-23 12:16:40 UTC (rev 3530) +++ trunk/src/server/psserver.cpp 2009-04-23 17:09:23 UTC (rev 3531) @@ -132,8 +132,6 @@ vfs = NULL; unused_pid = 0; - // Initialize the RNG using current time() as the seed value - randomGen.Initialize(); } #define PS_CHECK_REF_COUNT(c) printf("%3d %s\n",c->GetRefCount(),#c) Modified: trunk/src/server/psserver.h =================================================================== --- trunk/src/server/psserver.h 2009-04-23 12:16:40 UTC (rev 3530) +++ trunk/src/server/psserver.h 2009-04-23 17:09:23 UTC (rev 3531) @@ -356,14 +356,15 @@ /** Returns a random number. * - * @return Returns a random number between 0.0 and 1.0. + * @return Returns a random number between 0.0(inclusive) and 1.0(non-inclusive). */ - float GetRandom() { return randomGen.Get(); } + float GetRandom() { return rng->Get(); } + /** Returns a random number with a limit. * * @return Returns a random number between 0 and limit. */ - uint32 GetRandom(uint32 limit) { return randomGen.Get(limit); } + uint32 GetRandom(uint32 limit) { return rng->Get(limit); } /** * Convenience command to send a client a psSystemMessage. @@ -546,7 +547,6 @@ TutorialManager* tutorialmanager; MiniGameManager* minigamemanager; IntroductionManager* intromanager; - csRandomGen randomGen; MathScriptEngine* mathscriptengine; iObjectRegistry* objreg; csRef<iConfigManager> configmanager; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-24 09:39:42
|
Revision: 3533 http://planeshift.svn.sourceforge.net/planeshift/?rev=3533&view=rev Author: weltall2 Date: 2009-04-24 09:39:41 +0000 (Fri, 24 Apr 2009) Log Message: ----------- Moved an operation hardcoded in the code to be in the math_script as it's a more proper place (the check for repair time to be minimum 20) Modified Paths: -------------- trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-23 17:49:00 UTC (rev 3532) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-04-24 09:39:41 UTC (rev 3533) @@ -125,6 +125,7 @@ Result = Object:SalePrice/100; Factor = Worker:getSkillValue(Object:RequiredRepairSkill) / (Object:SalePrice/20); Result = Result / Factor; + Result = if(Result < 20, 20, Result); "); INSERT INTO math_scripts VALUES( "Calculate Repair Result", Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-23 17:49:00 UTC (rev 3532) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-24 09:39:41 UTC (rev 3533) @@ -1154,8 +1154,10 @@ #### added a new math script Calculate Repair Rank, removing so the hardcoded script INSERT INTO math_scripts VALUES( "Calculate Repair Rank","Result = if(Object:SalePrice > 300,Object:SalePrice/150,0);"); +-- remember to add this line at the end of Calculate Repair Time, +-- or the one of your choice which does the same +-- Result = if(Result < 20, 20, Result); - # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-23 17:49:00 UTC (rev 3532) +++ trunk/src/server/workmanager.cpp 2009-04-24 09:39:41 UTC (rev 3533) @@ -390,10 +390,7 @@ env.Define("Object", repairTarget); env.Define("Worker", client->GetCharacterData()); calc_repair_time->Evaluate(&env); - MathVar *varTime = env.Lookup("Result"); - // If time is less than 20 seconds, cap it to 20 seconds - int repair_time = MAX(20, varTime->GetValue()); - repairDuration = (csTicks)(repair_time * 1000); // convert secs to msec + repairDuration = (csTicks)(env.Lookup("Result")->GetValue() * 1000); // convert secs to msec } // Calculate result after repair This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-25 16:45:14
|
Revision: 3555 http://planeshift.svn.sourceforge.net/planeshift/?rev=3555&view=rev Author: weltall2 Date: 2009-04-25 16:45:06 +0000 (Sat, 25 Apr 2009) Log Message: ----------- made two other math scripts to determine the quality and max quality of the repair process and to evaluate assigned practice points and EXP. Additionally now exp is assigned to the char for repairing (before exp was not assigned at all) Modified Paths: -------------- trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-25 06:38:35 UTC (rev 3554) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-04-25 16:45:06 UTC (rev 3555) @@ -134,6 +134,20 @@ Result = ((Object:SalePrice/25) * Factor) * (rnd(1)+0.5); "); +INSERT INTO math_scripts VALUES( "Calculate Repair Quality", +" +ResultQ = if(Object:Quality+RepairAmount > Object:MaxQuality, Object:MaxQuality, Object:Quality+RepairAmount); +ResultMaxQ = Object:MaxQuality-(ResultQ-Object:Quality)*0.2; +ResultMaxQ = if(ResultMaxQ < 0, 0, ResultMaxQ); +ResultQ = if(ResultQ > ResultMaxQ, ResultMaxQ, ResultQ); +"); + +INSERT INTO math_scripts VALUES( "Calculate Repair Experience", +" +ResultPractice = 1; +ResultEXP = RepairAmount; +"); + INSERT INTO math_scripts VALUES( "CalculateFamiliarAffinity", "Affinity = Type + Lifecycle + AttackTool + AttackType;"); INSERT INTO math_scripts VALUES( "CalculateMaxPetTime", "MaxTime = 5 * 60 * 1000 * if(Skill,Skill,1);"); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-25 06:38:35 UTC (rev 3554) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-25 16:45:06 UTC (rev 3555) @@ -1154,10 +1154,25 @@ #### added a new math script Calculate Repair Rank, removing so the hardcoded script INSERT INTO math_scripts VALUES( "Calculate Repair Rank","Result = if(Object:SalePrice > 300,Object:SalePrice/150,0);"); + -- remember to add this line at the end of Calculate Repair Time, -- or the one of your choice which does the same -- Result = if(Result < 20, 20, Result); +INSERT INTO math_scripts VALUES( "Calculate Repair Quality", +" +ResultQ = if(Object:Quality+RepairAmount > Object:MaxQuality, Object:MaxQuality, Object:Quality+RepairAmount); +ResultMaxQ = Object:MaxQuality-(ResultQ-Object:Quality)*0.2; +ResultMaxQ = if(ResultMaxQ < 0, 0, ResultMaxQ); +ResultQ = if(ResultQ > ResultMaxQ, ResultMaxQ, ResultQ); +"); + +INSERT INTO math_scripts VALUES( "Calculate Repair Experience", +" +ResultPractice = 1; +ResultEXP = RepairAmount; +"); + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-25 06:38:35 UTC (rev 3554) +++ trunk/src/server/workmanager.cpp 2009-04-25 16:45:06 UTC (rev 3555) @@ -126,11 +126,13 @@ psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleWorkCommand),MSGTYPE_WORKCMD,REQUIRE_READY_CLIENT|REQUIRE_ALIVE); psserver->GetEventManager()->Subscribe(this,new NetMessageCallback<WorkManager>(this,&WorkManager::HandleLockPick),MSGTYPE_LOCKPICK,REQUIRE_READY_CLIENT|REQUIRE_ALIVE|REQUIRE_TARGET); - calc_repair_rank = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Rank"); - calc_repair_time = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Time"); - calc_repair_result = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Result"); - calc_mining_chance = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Odds"); - calc_lockpick_time = psserver->GetMathScriptEngine()->FindScript("Lockpicking Time"); + calc_repair_rank = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Rank"); + calc_repair_time = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Time"); + calc_repair_result = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Result"); + calc_repair_quality = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Quality"); + calc_repair_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Experience"); + calc_mining_chance = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Odds"); + calc_lockpick_time = psserver->GetMathScriptEngine()->FindScript("Lockpicking Time"); if (!calc_repair_rank) { @@ -144,6 +146,14 @@ { Error1("Could not find mathscript 'Calculate Repair Result'"); } + if (!calc_repair_quality) + { + Error1("Could not find mathscript 'Calculate Repair Quality'"); + } + if (!calc_repair_exp) + { + Error1("Could not find mathscript 'Calculate Repair Experience'"); + } if (!calc_mining_chance) { Error1("Could not find mathscript 'Calculate Mining Odds'"); @@ -400,8 +410,7 @@ env.Define("Object", repairTarget); env.Define("Worker", client->GetCharacterData()); calc_repair_result->Evaluate(&env); - MathVar *varResult = env.Lookup("Result"); - repairResult = varResult->GetValue(); + repairResult = env.Lookup("Result")->GetValue(); } // Queue time event to trigger when repair is complete, if not canceled. @@ -475,39 +484,54 @@ // TODO: Implement decay of quality of repair tool here if not consumed. } - float qualitybefore = repairTarget->GetItemQuality(); - - // Adjust the quality of the item - repairTarget->SetItemQuality( repairTarget->GetItemQuality() + workEvent->repairAmount); - // Limit quality to maximum quality - if (repairTarget->GetItemQuality() > repairTarget->GetMaxItemQuality()) + // Calculate resulting qualities after repair + float resultQuality; + float resultMaxQuality; { - repairTarget->SetItemQuality(repairTarget->GetMaxItemQuality()); + MathEnvironment env; + env.Define("Object", repairTarget); + env.Define("Worker", workEvent->client->GetCharacterData()); + env.Define("RepairAmount", workEvent->repairAmount); + calc_repair_quality->Evaluate(&env); + resultMaxQuality = env.Lookup("ResultMaxQ")->GetValue(); + resultQuality = env.Lookup("ResultQ")->GetValue(); } - // Lower the maximum quality based on the actual repair amount (new-qualitybefore) - float newmax = repairTarget->GetMaxItemQuality() - ((repairTarget->GetItemQuality()-qualitybefore) * 0.2); - newmax = (newmax<0) ? 0 : newmax; - repairTarget->SetMaxItemQuality(newmax); + repairTarget->SetItemQuality(resultQuality); + repairTarget->SetMaxItemQuality(resultMaxQuality); - // Limit quality to maximum quality again - if (repairTarget->GetItemQuality() > repairTarget->GetMaxItemQuality()) - { - repairTarget->SetItemQuality(repairTarget->GetMaxItemQuality()); - } - psserver->SendSystemResult(workEvent->client->GetClientNum(), "You have repaired your %s to %.0f out of %.0f", repairTarget->GetName(), repairTarget->GetItemQuality(), repairTarget->GetMaxItemQuality()); + // assign practice points + + int practicepoints; + int experiencepoints; + { + MathEnvironment env; + env.Define("Object", repairTarget); + env.Define("Worker", workEvent->client->GetCharacterData()); + env.Define("RepairAmount", workEvent->repairAmount); + calc_repair_exp->Evaluate(&env); + practicepoints = env.Lookup("ResultPractice")->GetValue(); + experiencepoints = env.Lookup("ResultEXP")->GetValue(); + } + int skillid = repairTarget->GetBaseStats()->GetCategory()->repairSkillId; psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)skillid); if (skill) { - workEvent->client->GetCharacterData()->Skills().AddSkillPractice((PSSKILL)skillid,1); + workEvent->client->GetCharacterData()->Skills().AddSkillPractice((PSSKILL)skillid,practicepoints); } + + if ( workEvent->client->GetCharacterData()->AddExperiencePoints(experiencepoints) > 0 ) //check if PP where assigned + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); + else + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); + repairTarget->Save(false); } Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-04-25 06:38:35 UTC (rev 3554) +++ trunk/src/server/workmanager.h 2009-04-25 16:45:06 UTC (rev 3555) @@ -267,6 +267,8 @@ MathScript *calc_repair_rank; ///< This is the calculation for how much skill is required to repair. MathScript *calc_repair_time; ///< This is the calculation for how long a repair takes. MathScript *calc_repair_result; ///< This is the calculation for how many points of quality are added in a repair. + MathScript *calc_repair_quality; ///< This calculates the item ending quality and max quality at the end of repair. + MathScript *calc_repair_exp; ///< This is the calculation for the experience to assign to player. MathScript *calc_mining_chance; ///< This is the calculation for chance of successful mining. MathScript *calc_lockpick_time; ///< This is the calculation for how long it takes to pick a lock. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-04-26 22:29:17
|
Revision: 3572 http://planeshift.svn.sourceforge.net/planeshift/?rev=3572&view=rev Author: kennygraunke Date: 2009-04-26 22:29:13 +0000 (Sun, 26 Apr 2009) Log Message: ----------- - Delete some dead code. Modified Paths: -------------- trunk/src/server/actionmanager.h trunk/src/server/entitymanager.cpp trunk/src/server/entitymanager.h Modified: trunk/src/server/actionmanager.h =================================================================== --- trunk/src/server/actionmanager.h 2009-04-26 22:28:45 UTC (rev 3571) +++ trunk/src/server/actionmanager.h 2009-04-26 22:29:13 UTC (rev 3572) @@ -113,14 +113,6 @@ */ void HandleMapAction( MsgEntry *msg, Client *client ); - // /** Processes psDRMessages - // * - // * @param msg The message to process - // * @param client The client that sent the message. - // */ - //void HandleMessage( psDRMessage *msg, Client *client ); - - void RemoveActiveTrigger( size_t clientnum, const psActionLocation *actionLocation ); /** Finds an ActionLocation from it's CEL Entity ID Modified: trunk/src/server/entitymanager.cpp =================================================================== --- trunk/src/server/entitymanager.cpp 2009-04-26 22:28:45 UTC (rev 3571) +++ trunk/src/server/entitymanager.cpp 2009-04-26 22:29:13 UTC (rev 3572) @@ -1126,48 +1126,3 @@ } } -void EntityManager::Teleport( gemObject *source, gemObject *dest) -{ - iSector * targetSector; - csVector3 targetPoint; - float yRot = 0.0; - InstanceID instance; - - gemActor *subject = dynamic_cast< gemActor * > (source); - - if ( !source || !dest || !subject ) - { - return; - } - - dest->GetPosition(targetPoint, yRot, targetSector); - instance = dest->GetInstance(); - - if ( SamePos( source, targetSector, targetPoint ) && (source->GetInstance() == instance) ) - { - return; - } - - // ---------- do the teleport - subject->pcmove->SetVelocity( csVector3(0.0f,0.0f,0.0f) ); - subject->SetPosition(targetPoint, yRot, targetSector); - subject->SetInstance(instance); - - // Update all clients with new position - subject->UpdateProxList(true); - subject->MulticastDRUpdate(); - - // save position of subject - subject->GetCharacterData()->SaveLocationInWorld(); -} - -bool EntityManager::SamePos(gemObject * actor, iSector * sector, const csVector3 & point) -{ - float yRot; - iSector * currSector; - csVector3 currPoint; - - actor->GetPosition(currPoint, yRot, currSector); - - return (currPoint == point) && (currSector == sector); -} Modified: trunk/src/server/entitymanager.h =================================================================== --- trunk/src/server/entitymanager.h 2009-04-26 22:28:45 UTC (rev 3571) +++ trunk/src/server/entitymanager.h 2009-04-26 22:29:13 UTC (rev 3572) @@ -136,16 +136,11 @@ ClientConnectionSet *GetClients() { return clients; }; psWorld* GetWorld() { return gameWorld; } - void Teleport( gemObject *subject, gemObject *dest); - protected: csHash<psAffinityAttribute *> affinityAttributeList; csHash<psFamiliarType*, PID> familiarTypeList; bool CreateRoom (const char* name, const char* mapfile); - - bool SamePos(gemObject * actor, iSector * sector, const csVector3 & point); - bool SendActorList(Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-27 18:07:20
|
Revision: 3577 http://planeshift.svn.sourceforge.net/planeshift/?rev=3577&view=rev Author: weltall2 Date: 2009-04-27 18:07:09 +0000 (Mon, 27 Apr 2009) Log Message: ----------- some changes around to improve output and optimization, added a math script for production (mining/fishing) exp/practice point Modified Paths: -------------- trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-27 16:03:06 UTC (rev 3576) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-04-27 18:07:09 UTC (rev 3577) @@ -148,6 +148,12 @@ ResultEXP = RepairAmount; "); +INSERT INTO math_scripts VALUES( "Calculate Mining Experience", +" +ResultEXP = if(Success, 25, 2); +ResultPractice = if(Success, 1, 0); +"); + INSERT INTO math_scripts VALUES( "CalculateFamiliarAffinity", "Affinity = Type + Lifecycle + AttackTool + AttackType;"); INSERT INTO math_scripts VALUES( "CalculateMaxPetTime", "MaxTime = 5 * 60 * 1000 * if(Skill,Skill,1);"); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-27 16:03:06 UTC (rev 3576) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-27 18:07:09 UTC (rev 3577) @@ -1173,6 +1173,12 @@ ResultEXP = RepairAmount; "); +INSERT INTO math_scripts VALUES( "Calculate Mining Experience", +" +ResultEXP = if(Success, 25, 2); +ResultPractice = if(Success, 1, 0); +"); + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-27 16:03:06 UTC (rev 3576) +++ trunk/src/server/workmanager.cpp 2009-04-27 18:07:09 UTC (rev 3577) @@ -64,7 +64,7 @@ #include "adminmanager.h" //#define DEBUG_WORKMANAGER // debugging only -//#define NO_RANDOM_QUALITY // no not apply randomness to calculations +//#define NO_RANDOM_QUALITY // do not apply randomness to calculations /* * There are four types of work that can be done: @@ -132,6 +132,7 @@ calc_repair_quality = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Quality"); calc_repair_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Experience"); calc_mining_chance = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Odds"); + calc_mining_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Experience"); calc_lockpick_time = psserver->GetMathScriptEngine()->FindScript("Lockpicking Time"); if (!calc_repair_rank) @@ -158,6 +159,10 @@ { Error1("Could not find mathscript 'Calculate Mining Odds'"); } + if (!calc_mining_exp) + { + Error1("Could not find mathscript 'Calculate Mining Experience'"); + } if (!calc_lockpick_time) { Error1("Could not find mathscript 'Lockpicking Time'"); @@ -527,10 +532,13 @@ workEvent->client->GetCharacterData()->Skills().AddSkillPractice((PSSKILL)skillid,practicepoints); } - if ( workEvent->client->GetCharacterData()->AddExperiencePoints(experiencepoints) > 0 ) //check if PP where assigned - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); - else - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); + if ( experiencepoints > 0 ) //check if there is experience to assign. + { + if ( workEvent->client->GetCharacterData()->AddExperiencePoints(experiencepoints) > 0 ) //check if PP where assigned + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); + else + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); + } repairTarget->Save(false); } @@ -852,16 +860,6 @@ if (roll < total) // successful! { - unsigned int ppGained = workerchar->AddExperiencePoints(25); - - if (workEvent->client) - { - if ( ppGained > 0 ) - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and a progression point!"); - else - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); - } - psItemStats *newitem = CacheManager::GetSingleton().GetBasicItemStatsByID(workEvent->nr->reward); if (!newitem) { @@ -922,34 +920,51 @@ { workEvent->client->GetActor()->SetLastProductionPos(pos); } - - // increase practice in that skill - psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)workEvent->nr->skill->id); - if (skill) - { - workerchar->Skills().AddSkillPractice(PSSKILL_MINING,1); - } } } else { - unsigned int ppGained = workerchar->AddExperiencePoints(2); - if (workEvent->client) { - if ( ppGained > 0 ) - psserver->SendSystemInfo(workEvent->worker->GetClientID(),"You gained a little experience and a progression point!"); - else - psserver->SendSystemInfo(workEvent->worker->GetClientID(),"You gained a little experience"); - - psserver->SendSystemInfo(workEvent->worker->GetClientID(),"You were not successful."); } else { Debug2(LOG_SUPERCLIENT,0,"%s where not successful.",workEvent->worker->GetName()); } + } + //Assign experience and practice points + int practicepoints; + int experiencepoints; + { + MathEnvironment env; + env.Define("Success", roll < total); + env.Define("Worker", workEvent->client->GetCharacterData()); + calc_mining_exp->Evaluate(&env); + practicepoints = env.Lookup("ResultPractice")->GetValue(); + experiencepoints = env.Lookup("ResultEXP")->GetValue(); } + + if(experiencepoints > 0) //check if there is experience to assign. + { + unsigned int ppGained = workerchar->AddExperiencePoints(experiencepoints); + + if (workEvent->client) + { + if ( ppGained > 0 ) + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); + else + psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); + } + } + + // increase practice in that skill + psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)workEvent->nr->skill->id); + if (skill) + { + workerchar->Skills().AddSkillPractice(PSSKILL_MINING,practicepoints); + } + workEvent->worker->SetMode(PSCHARACTER_MODE_PEACE); // Actor isn't working anymore } @@ -3690,7 +3705,7 @@ break; } } - +///TODO: CHANGE // Calculate and apply experience points if (result > 0 && startQuality < currentQuality) { Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-04-27 16:03:06 UTC (rev 3576) +++ trunk/src/server/workmanager.h 2009-04-27 18:07:09 UTC (rev 3577) @@ -268,8 +268,9 @@ MathScript *calc_repair_time; ///< This is the calculation for how long a repair takes. MathScript *calc_repair_result; ///< This is the calculation for how many points of quality are added in a repair. MathScript *calc_repair_quality; ///< This calculates the item ending quality and max quality at the end of repair. - MathScript *calc_repair_exp; ///< This is the calculation for the experience to assign to player. + MathScript *calc_repair_exp; ///< This is the calculation for the experience to assign to player for repairing. MathScript *calc_mining_chance; ///< This is the calculation for chance of successful mining. + MathScript *calc_mining_exp; ///< This is the calculation for the experience to assign to player for mining. MathScript *calc_lockpick_time; ///< This is the calculation for how long it takes to pick a lock. void HandleLockPick(MsgEntry* me,Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-04-28 17:39:36
|
Revision: 3584 http://planeshift.svn.sourceforge.net/planeshift/?rev=3584&view=rev Author: kougaro Date: 2009-04-28 17:39:30 +0000 (Tue, 28 Apr 2009) Log Message: ----------- Changed a few RangeTo calls so that they ignore instances, fixing some ALs Modified Paths: -------------- trunk/src/server/slotmanager.cpp trunk/src/server/workmanager.cpp Modified: trunk/src/server/slotmanager.cpp =================================================================== --- trunk/src/server/slotmanager.cpp 2009-04-28 15:25:08 UTC (rev 3583) +++ trunk/src/server/slotmanager.cpp 2009-04-28 17:39:30 UTC (rev 3584) @@ -156,7 +156,7 @@ if (!itemProposed) { - Error5("Cannot find any item in slot %d for container %s(%d) range of player is %g.", msg.fromSlot, parentItem->GetName(), parentItem->GetUID(), fromClient->GetActor()->RangeTo(worldContainer, true)); + Error5("Cannot find any item in slot %d for container %s(%d) range of player is %g.", msg.fromSlot, parentItem->GetName(), parentItem->GetUID(), fromClient->GetActor()->RangeTo(worldContainer, true, true)); return; } @@ -166,7 +166,7 @@ return; } - if (fromClient->GetActor()->RangeTo(worldContainer, true) > RANGE_TO_USE) + if (fromClient->GetActor()->RangeTo(worldContainer, true, true) > RANGE_TO_USE) { psserver->SendSystemError(fromClient->GetClientNum(), "You are not in range to use %s.",worldContainer->GetItem()->GetName()); @@ -463,7 +463,7 @@ psserver->SendSystemError(fromClient->GetClientNum(), "You may not use that container."); return; } - if (fromClient->GetActor()->RangeTo(worldContainer, true) > RANGE_TO_USE) + if (fromClient->GetActor()->RangeTo(worldContainer, true, true) > RANGE_TO_USE) { psserver->SendSystemError(fromClient->GetClientNum(), "You are not in range to use %s.",worldContainer->GetItem()->GetName()); Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-28 15:25:08 UTC (rev 3583) +++ trunk/src/server/workmanager.cpp 2009-04-28 17:39:30 UTC (rev 3584) @@ -2538,7 +2538,7 @@ } // Check range ignoring Y co-ordinate - if (worker->RangeTo(target, true) > RANGE_TO_USE) + if (worker->RangeTo(target, true, true) > RANGE_TO_USE) { psserver->SendSystemError(clientNum,"You are not in range to use %s.",target->GetItem()->GetName()); return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-04-28 20:54:15
|
Revision: 3586 http://planeshift.svn.sourceforge.net/planeshift/?rev=3586&view=rev Author: weltall2 Date: 2009-04-28 20:53:51 +0000 (Tue, 28 Apr 2009) Log Message: ----------- made a generic experience math script which takes a modifier and practice points as arguments, and assigns them later along with calculated experience Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-04-28 17:43:05 UTC (rev 3585) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-04-28 20:53:51 UTC (rev 3586) @@ -167,6 +167,10 @@ 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; @@ -1048,6 +1052,47 @@ return pp; } +unsigned int psCharacter::CalculateAddExperience(PSSKILL skill, unsigned int practicePoints, float modifier) +{ + if(practicePoints > 0) + { + MathEnvironment env; + env.Define("ZCost", skills.Get(skill).zCost); + env.Define("YCost", skills.Get(skill).yCost); + env.Define("ZCostNext", skills.Get(skill).zCostNext); + env.Define("YCostNext", skills.Get(skill).yCostNext); + env.Define("Character", this); + env.Define("PracticePoints", practicePoints); + env.Define("Modifier", modifier); + expSkillCalc->Evaluate(&env); + int experiencePoints = env.Lookup("Exp")->GetValue(); + if(experiencePoints > 0) + { + unsigned int PP = AddExperiencePoints(experiencePoints); + if(GetActor() && GetActor()->GetClientID()) + { + if(PP > 0) + { + csString message; + message.Format("You gained some experience points and %d progression points!", PP); + psserver->SendSystemInfo(GetActor()->GetClientID(), message.GetData()); + } + else + { + psserver->SendSystemInfo(GetActor()->GetClientID(),"You gained some experience points"); + } + } + } + + if (CacheManager::GetSingleton().GetSkillByID((PSSKILL)skill)) //check if skill is valid + { + Skills().AddSkillPractice(skill, practicePoints); + } + return experiencePoints; + } + return practicePoints; +} + void psCharacter::SetSpouseName( const char* name ) { if ( !name ) @@ -3168,6 +3213,14 @@ // Get the output yCost = (int)yCostVar->GetValue(); zCost = (int)zCostVar->GetValue(); + + //calculate the next level costs. Used by the CalculateAddExperience. + env.Define("SkillRank", rank.Base()+1); + script->Evaluate(&env); + + yCostNext = (int)yCostVar->GetValue(); + zCostNext = (int)zCostVar->GetValue(); + /* // Make sure the y values is clamped to the cost. Otherwise Practice may always // fail. Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-04-28 17:43:05 UTC (rev 3585) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-04-28 20:53:51 UTC (rev 3586) @@ -313,6 +313,8 @@ unsigned short zCost; ///< Cost in Z points. unsigned short yCost; ///< cost in y points. + unsigned short zCostNext;///< Cost in Z points of next level. + unsigned short yCostNext;///< cost in y points of next level. bool dirtyFlag; ///< Flag if this was changed after load from database psSkillInfo *info; ///< Database information about the skill. @@ -828,6 +830,7 @@ unsigned int GetExperiencePoints(); // W void SetExperiencePoints(unsigned int W); unsigned int AddExperiencePoints(unsigned int W); + unsigned int CalculateAddExperience(PSSKILL skill, unsigned int awardedPoints, float modifier = 1); unsigned int GetProgressionPoints(); // X void SetProgressionPoints(unsigned int X,bool save); void UseProgressionPoints(unsigned int X); @@ -1149,7 +1152,8 @@ MathScript* powerScript, *maxRealmScript; ///< The PowerLevel math script - MathScript* staminaCalc; ///< The stamina calc script + MathScript* staminaCalc; ///< The stamina calc script + MathScript* expSkillCalc; ///< The exp calc script to assign experience on skill ranking protected: Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-28 17:43:05 UTC (rev 3585) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-04-28 20:53:51 UTC (rev 3586) @@ -145,15 +145,20 @@ INSERT INTO math_scripts VALUES( "Calculate Repair Experience", " ResultPractice = 1; -ResultEXP = RepairAmount; +ResultModifier = RepairAmount; "); INSERT INTO math_scripts VALUES( "Calculate Mining Experience", " -ResultEXP = if(Success, 25, 2); ResultPractice = if(Success, 1, 0); +ResultModifier = if(Success, 25, 2); "); +INSERT INTO math_scripts VALUES( "Calculate Skill Experience", +" +Exp = PracticePoints*Modifier; +"); + INSERT INTO math_scripts VALUES( "CalculateFamiliarAffinity", "Affinity = Type + Lifecycle + AttackTool + AttackType;"); INSERT INTO math_scripts VALUES( "CalculateMaxPetTime", "MaxTime = 5 * 60 * 1000 * if(Skill,Skill,1);"); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-28 17:43:05 UTC (rev 3585) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-28 20:53:51 UTC (rev 3586) @@ -1170,15 +1170,20 @@ INSERT INTO math_scripts VALUES( "Calculate Repair Experience", " ResultPractice = 1; -ResultEXP = RepairAmount; +ResultModifier = RepairAmount; "); INSERT INTO math_scripts VALUES( "Calculate Mining Experience", " -ResultEXP = if(Success, 25, 2); ResultPractice = if(Success, 1, 0); +ResultModifier = if(Success, 25, 2); "); +INSERT INTO math_scripts VALUES( "Calculate Skill Experience", +" +Exp = PracticePoints*Modifier; +"); + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-28 17:43:05 UTC (rev 3585) +++ trunk/src/server/workmanager.cpp 2009-04-28 20:53:51 UTC (rev 3586) @@ -511,35 +511,24 @@ repairTarget->GetItemQuality(), repairTarget->GetMaxItemQuality()); - // assign practice points + // calculate practice points - int practicepoints; - int experiencepoints; + int practicePoints; + float modifier; { MathEnvironment env; env.Define("Object", repairTarget); env.Define("Worker", workEvent->client->GetCharacterData()); env.Define("RepairAmount", workEvent->repairAmount); calc_repair_exp->Evaluate(&env); - practicepoints = env.Lookup("ResultPractice")->GetValue(); - experiencepoints = env.Lookup("ResultEXP")->GetValue(); + practicePoints = env.Lookup("ResultPractice")->GetValue(); + modifier = env.Lookup("ResultModifier")->GetValue(); } int skillid = repairTarget->GetBaseStats()->GetCategory()->repairSkillId; - psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)skillid); - if (skill) - { - workEvent->client->GetCharacterData()->Skills().AddSkillPractice((PSSKILL)skillid,practicepoints); - } + //assigns points and exp + workEvent->client->GetCharacterData()->CalculateAddExperience((PSSKILL)skillid, practicePoints, modifier); - if ( experiencepoints > 0 ) //check if there is experience to assign. - { - if ( workEvent->client->GetCharacterData()->AddExperiencePoints(experiencepoints) > 0 ) //check if PP where assigned - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); - else - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); - } - repairTarget->Save(false); } @@ -934,36 +923,20 @@ } //Assign experience and practice points - int practicepoints; - int experiencepoints; + int practicePoints; + float modifier; { MathEnvironment env; env.Define("Success", roll < total); env.Define("Worker", workEvent->client->GetCharacterData()); calc_mining_exp->Evaluate(&env); - practicepoints = env.Lookup("ResultPractice")->GetValue(); - experiencepoints = env.Lookup("ResultEXP")->GetValue(); + practicePoints = env.Lookup("ResultPractice")->GetValue(); + modifier = env.Lookup("ResultModifier")->GetValue(); } - if(experiencepoints > 0) //check if there is experience to assign. - { - unsigned int ppGained = workerchar->AddExperiencePoints(experiencepoints); - if (workEvent->client) - { - if ( ppGained > 0 ) - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points and progression points!"); - else - psserver->SendSystemInfo(workEvent->client->GetClientNum(),"You gained some experience points"); - } - } - - // increase practice in that skill - psSkillInfo *skill = CacheManager::GetSingleton().GetSkillByID((PSSKILL)workEvent->nr->skill->id); - if (skill) - { - workerchar->Skills().AddSkillPractice(PSSKILL_MINING,practicepoints); - } + // assign practice and experience + workEvent->client->GetCharacterData()->CalculateAddExperience((PSSKILL)workEvent->nr->skill->id, practicePoints, modifier); workEvent->worker->SetMode(PSCHARACTER_MODE_PEACE); // Actor isn't working anymore } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-04-29 03:03:08
|
Revision: 3590 http://planeshift.svn.sourceforge.net/planeshift/?rev=3590&view=rev Author: kougaro Date: 2009-04-29 03:02:55 +0000 (Wed, 29 Apr 2009) Log Message: ----------- Fix to /drop, which should now work for named items too. Dedicated to XilliX Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/slotmanager.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2009-04-29 00:10:41 UTC (rev 3589) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2009-04-29 03:02:55 UTC (rev 3590) @@ -1238,7 +1238,7 @@ return items; } -psItem* psCharacterInventory::StackNumberItems(psItemStats * testItemStats, int count, bool container) +psItem* psCharacterInventory::StackNumberItems(const char * itemname, int count, bool container) { psItem* stackItem = NULL; @@ -1246,7 +1246,7 @@ unsigned int i; for (i = 1; i<inventory.GetSize(); i++) { - if (inventory[i].item->GetBaseStats() == testItemStats && !(inventory[i].item->IsInUse()) && + if (inventory[i].item->GetName() == itemname && !(inventory[i].item->IsInUse()) && (container || (inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK_END) )) { stackItem = inventory[i].item; @@ -1257,9 +1257,9 @@ if(!stackItem) return NULL; - for (unsigned int j = i+1;count > stackItem->GetStackCount() && j<inventory.GetSize(); j++) + for (unsigned int j = i+1;count > stackItem->GetStackCount() && j < inventory.GetSize(); j++) { - if (inventory[j].item->GetBaseStats() == testItemStats && !(inventory[j].item->IsInUse()) && + if (inventory[j].item->GetName() == itemname && !(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-04-29 00:10:41 UTC (rev 3589) +++ trunk/src/server/bulkobjects/pscharinventory.h 2009-04-29 03:02:55 UTC (rev 3590) @@ -325,7 +325,7 @@ */ csArray<psItem*> GetItemsInCategory(psItemCategory * category); - psItem* StackNumberItems(psItemStats * testItemStats, int count, bool container); + psItem* StackNumberItems(const char * itemname, int count, bool container); size_t GetContainedItemCount(psItem *container); Modified: trunk/src/server/slotmanager.cpp =================================================================== --- trunk/src/server/slotmanager.cpp 2009-04-29 00:10:41 UTC (rev 3589) +++ trunk/src/server/slotmanager.cpp 2009-04-29 03:02:55 UTC (rev 3590) @@ -937,19 +937,8 @@ return; } - psItemStats * testItemStats; - if(!mesg.itemName.IsEmpty()) - testItemStats = CacheManager::GetSingleton().GetBasicItemStatsByName(mesg.itemName); - - if(!testItemStats) - { - //Error2("Could not find Item Stats for this item: %s", mesg.itemName.GetData()); - psserver->SendSystemInfo(fromClient->GetClientNum(), "Item %s not found.", mesg.itemName.GetData()); - return; - } - psCharacter *chr = fromClient->GetCharacterData(); - psItem* stackItem = chr->Inventory().StackNumberItems(testItemStats, mesg.quantity, mesg.container); + psItem* stackItem = chr->Inventory().StackNumberItems(mesg.itemName, mesg.quantity, mesg.container); if(!stackItem) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-04-29 05:51:33
|
Revision: 3591 http://planeshift.svn.sourceforge.net/planeshift/?rev=3591&view=rev Author: kougaro Date: 2009-04-29 05:51:28 +0000 (Wed, 29 Apr 2009) Log Message: ----------- Now combines should appear in the crafting book as soon as a transform is available for the resulting item. Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/cachemanager.cpp trunk/src/server/cachemanager.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-04-29 03:02:55 UTC (rev 3590) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-04-29 05:51:28 UTC (rev 3591) @@ -2757,37 +2757,43 @@ void psItem::GetComboInfoString(psCharacter* character, uint32 designID, csString & comboString) { - CraftComboInfo* combInfo = CacheManager::GetSingleton().GetTradeComboInfoByItemID(designID); - if (!combInfo) + csArray<CraftComboInfo*>* combInfoArray = CacheManager::GetSingleton().GetTradeComboInfoByItemID(designID); + if (!combInfoArray) return; - // If any skill check fails then do not display this combinations string - csArray<CraftSkills*>* skillArray = combInfo->skillArray; - for ( int count = 0; count<(int)skillArray->GetSize(); count++ ) + csArray<CraftComboInfo*>::Iterator combInfoIter(combInfoArray->GetIterator()); + while(combInfoIter.HasNext()) { - // Check if craft step minimum primary skill level is meet by client - int priSkill = skillArray->Get(count)->priSkillId; - if(priSkill != 0) + CraftComboInfo* combInfo = combInfoIter.Next(); + // If any skill check succeed then display this combinations string. + // that means we have a way to do something with the result of the combine + csArray<CraftSkills*>* skillArray = combInfo->skillArray; + for ( int count = 0; count<(int)skillArray->GetSize(); count++ ) { - if (skillArray->Get(count)->minPriSkill >= character->Skills().GetSkillRank((PSSKILL) priSkill).Current()) + // Check if craft step minimum primary skill level is meet by client + int priSkill = skillArray->Get(count)->priSkillId; + if(priSkill != 0) { - return; + if (skillArray->Get(count)->minPriSkill >= character->Skills().GetSkillRank((PSSKILL) priSkill).Current()) + { + continue; + } } - } - // Check if craft step minimum secondary skill level is meet by client - int secSkill = skillArray->Get(count)->secSkillId; - if(secSkill != 0) - { - if (skillArray->Get(count)->minSecSkill >= (int)character->Skills().GetSkillRank((PSSKILL) secSkill).Current()) + // Check if craft step minimum secondary skill level is meet by client + int secSkill = skillArray->Get(count)->secSkillId; + if(secSkill != 0) { - return; + if (skillArray->Get(count)->minSecSkill >= (int)character->Skills().GetSkillRank((PSSKILL) secSkill).Current()) + { + continue; + } } + // Otherwise send combination string, and go on to next combine + comboString.Append(combInfo->craftCombDescription); + break; } } - - // Otherwise send combination string - comboString.Append(combInfo->craftCombDescription); } void psItem::GetTransInfoString(psCharacter* character, uint32 designID, csString & transString) Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2009-04-29 03:02:55 UTC (rev 3590) +++ trunk/src/server/cachemanager.cpp 2009-04-29 05:51:28 UTC (rev 3591) @@ -304,17 +304,23 @@ } { - csHash<CraftComboInfo*,uint32>::GlobalIterator it(tradeCraftComboInfo_IDHash.GetIterator ()); + csHash<csArray<CraftComboInfo*>*,uint32>::GlobalIterator it(tradeCraftComboInfo_IDHash.GetIterator ()); while (it.HasNext ()) { - CraftComboInfo* newCombo = it.Next (); - csArray<CraftSkills*>::Iterator it2(newCombo->skillArray->GetIterator ()); - while (it2.HasNext ()) + csArray<CraftComboInfo*>* newComboArray = it.Next (); + csArray<CraftComboInfo*>::Iterator it2(newComboArray->GetIterator ()); + while(it2.HasNext ()) { - CraftSkills* newCraftSkill = it2.Next (); - delete newCraftSkill; + CraftComboInfo* newCombo = it2.Next (); + csArray<CraftSkills*>::Iterator it3(newCombo->skillArray->GetIterator ()); + while (it3.HasNext ()) + { + CraftSkills* newCraftSkill = it3.Next (); + delete newCraftSkill; + } + delete newCombo; } - delete newCombo; + delete newComboArray; } tradeCraftComboInfo_IDHash.Empty(); } @@ -959,7 +965,7 @@ lastiid = iid; } - // Finnaly just load the transformation into existing array + // Finally just load the transformation into existing array psTradeTransformations* tran = new psTradeTransformations; if (tran->Load(result[currentrow])) newArray->Push(tran); @@ -1176,21 +1182,24 @@ csPDelArray<CombinationConstruction>* combArray = FindCombinationsList(currentID); if (combArray) { - // Get the combination craft info string - CraftComboInfo* combInfo = new CraftComboInfo; - csArray<CraftSkills*>* craftArray = new csArray<CraftSkills*>; - combInfo->skillArray = craftArray; - combInfo->craftCombDescription = CreateComboCraftDescription(combArray); - + csArray<CraftComboInfo*>* newComboArray = new csArray<CraftComboInfo*>; + // Get the skills array from the transformations for (size_t i=0; i<combArray->GetSize(); i++) { uint32 resultID = combArray->Get(i)->resultItem; csPDelArray<psTradeTransformations>* transArray = FindTransformationsList(currentID, resultID); - if (!transArray) { + if (!transArray) + { Error3("Can not find any transformation data for pattern %d and result %u ",currentID, resultID); continue; } + + // Get the combination craft info string + CraftComboInfo* combInfo = new CraftComboInfo; + combInfo->skillArray = new csArray<CraftSkills*>; + combInfo->craftCombDescription = CreateComboCraftDescription(combArray->Get(i)); + for (size_t j=0; j<transArray->GetSize(); j++) { psTradeTransformations* trans = transArray->Get(j); @@ -1212,32 +1221,36 @@ craftSkill->minPriSkill = proc->GetMinPrimarySkill(); craftSkill->secSkillId = proc->GetSecondarySkillId(); craftSkill->minSecSkill = proc->GetMinSecondarySkill(); - craftArray->Push(craftSkill); + combInfo->skillArray->Push(craftSkill); } } + newComboArray->Push(combInfo); } - tradeCraftComboInfo_IDHash.Put(designItemID,combInfo); + tradeCraftComboInfo_IDHash.Put(designItemID,newComboArray); } // Preload the combination craft string for current group pattern csPDelArray<CombinationConstruction>* combGroupArray = FindCombinationsList(currentGroupID); if (combGroupArray) { - // Get the combination craft info string - CraftComboInfo* combInfo = new CraftComboInfo; - csArray<CraftSkills*>* craftArray = new csArray<CraftSkills*>; - combInfo->skillArray = craftArray; - combInfo->craftCombDescription = CreateComboCraftDescription(combGroupArray); - + csArray<CraftComboInfo*>* newGroupComboArray = new csArray<CraftComboInfo*>; + // Get the skills array from the transformations for (size_t i=0; i<combGroupArray->GetSize(); i++) { uint32 resultID = combGroupArray->Get(i)->resultItem; csPDelArray<psTradeTransformations>* transArray = FindTransformationsList(currentGroupID, resultID); - if (!transArray) { + if (!transArray) + { Error3("Can not find any transformation data for group pattern %d and result %u ",currentGroupID, resultID); continue; } + + // Get the combination craft info string + CraftComboInfo* combInfo = new CraftComboInfo; + combInfo->skillArray = new csArray<CraftSkills*>; + combInfo->craftCombDescription = CreateComboCraftDescription(combGroupArray->Get(i)); + for (size_t j=0; j<transArray->GetSize(); j++) { psTradeTransformations* trans = transArray->Get(j); @@ -1259,11 +1272,12 @@ craftSkill->minPriSkill = proc->GetMinPrimarySkill(); craftSkill->secSkillId = proc->GetSecondarySkillId(); craftSkill->minSecSkill = proc->GetMinSecondarySkill(); - craftArray->Push(craftSkill); + combInfo->skillArray->Push(craftSkill); } } + newGroupComboArray->Push(combInfo); } - tradeCraftComboInfo_IDHash.Put(designItemID,combInfo); + tradeCraftComboInfo_IDHash.Put(designItemID,newGroupComboArray); } // If it is a new design item then create new cache @@ -1445,78 +1459,70 @@ return desc; } -csString CacheManager::CreateComboCraftDescription(csPDelArray<CombinationConstruction>* combArray) +csString CacheManager::CreateComboCraftDescription(CombinationConstruction* currentComb) { csString temp; csString desc(""); - // Go through all of the combinations creating the info description - for (size_t i=0; i<combArray->GetSize(); i++) + // Check for matching lists and create combination info string + // Example: "Combine between 2 and 4 Eggs, Nuts, 5 Milk into Waybread Batter." + + desc.Append("Combine "); + + // Get each of the items + for (size_t j=0; j<currentComb->combinations.GetSize(); j++) { - // Check for matching lists and create combination info string - // Example: "Combine between 2 and 4 Eggs, Nuts, 5 Milk into Waybread Batter." - CombinationConstruction* current = combArray->Get(i); - if (!current) + uint32 combId = currentComb->combinations[j]->GetItemId(); + int combMinQty = currentComb->combinations[j]->GetMinQty(); + int combMaxQty = currentComb->combinations[j]->GetMaxQty(); + psItemStats* itemStats = CacheManager::GetSingleton().GetBasicItemStatsByID( combId ); + if (!itemStats) { - Error2("No combination construction in combination array location %zu", i); + Error2("No item stats for id %u", combId); return desc; } - desc.Append("Combine "); - // Get each of the items - for (size_t j=0; j<current->combinations.GetSize(); j++) + // Check if min and max is same + if(combMinQty == combMaxQty) { - uint32 combId = current->combinations[j]->GetItemId(); - int combMinQty = current->combinations[j]->GetMinQty(); - int combMaxQty = current->combinations[j]->GetMaxQty(); - psItemStats* itemStats = CacheManager::GetSingleton().GetBasicItemStatsByID( combId ); - if (!itemStats) + if (combMinQty == 1) { - Error2("No item stats for id %u", combId); - return desc; + temp.Format("%s, ", itemStats->GetName()); + desc.Append(temp); } - - // Check if min and max is same - if(combMinQty == combMaxQty) - { - if (combMinQty == 1) - { - temp.Format("%s, ", itemStats->GetName()); - desc.Append(temp); - } - else - { - temp.Format("%d %ss, ", combMinQty, itemStats->GetName()); - desc.Append(temp); - } - } else { - temp.Format("between %d and %d %ss, ", combMinQty, combMaxQty, itemStats->GetName()); + temp.Format("%d %ss, ", combMinQty, itemStats->GetName()); desc.Append(temp); } } - - // Get result item names - psItemStats* resultItemStats = CacheManager::GetSingleton().GetBasicItemStatsByID( current->resultItem ); - if (!resultItemStats) - { - Error2("No item stats for id %u", current->resultItem); - return desc; - } - - // Add result part of description - if (current->resultQuantity == 1) - { - temp.Format("into %s.\n", resultItemStats->GetName()); - desc.Append(temp); - } else { - temp.Format("into %d %ss.\n", current->resultQuantity, resultItemStats->GetName()); + temp.Format("between %d and %d %ss, ", combMinQty, combMaxQty, itemStats->GetName()); desc.Append(temp); } } + + // Get result item names + psItemStats* resultItemStats = CacheManager::GetSingleton().GetBasicItemStatsByID( currentComb->resultItem ); + if (!resultItemStats) + { + Error2("No item stats for id %u", currentComb->resultItem); + return desc; + } + + // Add result part of description + if (currentComb->resultQuantity == 1) + { + temp.Format("into %s.\n", resultItemStats->GetName()); + desc.Append(temp); + } + else + { + temp.Format("into %d %ss.\n", currentComb->resultQuantity, resultItemStats->GetName()); + desc.Append(temp); + } + return desc; } @@ -1525,7 +1531,7 @@ return tradeCraftTransInfo_IDHash.Get(id,NULL); } -CraftComboInfo* CacheManager::GetTradeComboInfoByItemID(uint32 id) +csArray<CraftComboInfo*>* CacheManager::GetTradeComboInfoByItemID(uint32 id) { return tradeCraftComboInfo_IDHash.Get(id,NULL); } Modified: trunk/src/server/cachemanager.h =================================================================== --- trunk/src/server/cachemanager.h 2009-04-29 03:02:55 UTC (rev 3590) +++ trunk/src/server/cachemanager.h 2009-04-29 05:51:28 UTC (rev 3591) @@ -284,9 +284,9 @@ psTradePatterns* GetTradePatternByItemID(uint32 id); psTradePatterns* GetTradePatternByName(csString name); csString CreateTransCraftDescription(psTradeTransformations* tran, psTradeProcesses* proc); - csString CreateComboCraftDescription(csPDelArray<CombinationConstruction>* combArray); + csString CreateComboCraftDescription(CombinationConstruction* combArray); csArray<CraftTransInfo*>* GetTradeTransInfoByItemID(uint32 id); - CraftComboInfo* GetTradeComboInfoByItemID(uint32 id); + csArray<CraftComboInfo*>* GetTradeComboInfoByItemID(uint32 id); // Items psItemStats *GetBasicItemStatsByName(csString name); @@ -431,8 +431,8 @@ csHash<CachedObject *, csString> generic_object_cache; csStringHashReversible msg_strings; - csHash<psSectorInfo *> sectorinfo_by_id; /// Sector info list hashed by sector id - csHash<psSectorInfo *> sectorinfo_by_name; /// Sector info list hashed by sector name + csHash<psSectorInfo *> sectorinfo_by_id; ///< Sector info list hashed by sector id + csHash<psSectorInfo *> sectorinfo_by_name; ///< Sector info list hashed by sector name csPDelArray<psTrait > traitlist; csPDelArray<psRaceInfo > raceinfolist; csPDelArray<psSkillInfo > skillinfolist; @@ -456,13 +456,13 @@ csHash<csHash<csPDelArray<psTradeTransformations> *,uint32> *,uint32> tradeTransformations_IDHash; csHash<csArray<uint32> *,uint32> tradeTransUnique_IDHash; csHash<csArray<CraftTransInfo*> *,uint32> tradeCraftTransInfo_IDHash; - csHash<CraftComboInfo*,uint32> tradeCraftComboInfo_IDHash; - csArray<csString> tips_list; /// List for the tips + csHash<csArray<CraftComboInfo*> *,uint32> tradeCraftComboInfo_IDHash; + csArray<csString> tips_list; ///< List for the tips csStringArray bad_names; csPDelArray<ArmorVsWeapon> armor_vs_weapon; csPDelArray<psCharMode> char_modes; csPDelArray<psMovement> movements; - csPDelArray<psCharacterLimitation> limits; /// All the limitations based on scores for characters. + csPDelArray<psCharacterLimitation> limits; ///< All the limitations based on scores for characters. psCommandManager* commandManager; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-05-01 09:20:37
|
Revision: 3596 http://planeshift.svn.sourceforge.net/planeshift/?rev=3596&view=rev Author: weltall2 Date: 2009-05-01 09:20:27 +0000 (Fri, 01 May 2009) Log Message: ----------- made a new math script for the experience calculation of tranformations, separated exp giving notifications from the generic exp assigned function, various clean ups Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-05-01 09:20:27 UTC (rev 3596) @@ -1052,6 +1052,29 @@ return pp; } +unsigned int psCharacter::AddExperiencePointsNotify(unsigned int experiencePoints) +{ + if(experiencePoints > 0) + { + unsigned int PP = AddExperiencePoints(experiencePoints); + if(GetActor() && GetActor()->GetClientID()) + { + if(PP > 0) + { + csString message; + message.Format("You gained some experience points and %d progression points!", PP); + psserver->SendSystemInfo(GetActor()->GetClientID(), message.GetData()); + } + else + { + psserver->SendSystemInfo(GetActor()->GetClientID(),"You gained some experience points"); + } + } + return PP; + } + return 0; +} + unsigned int psCharacter::CalculateAddExperience(PSSKILL skill, unsigned int practicePoints, float modifier) { if(practicePoints > 0) @@ -1065,32 +1088,17 @@ env.Define("PracticePoints", practicePoints); env.Define("Modifier", modifier); expSkillCalc->Evaluate(&env); - int experiencePoints = env.Lookup("Exp")->GetValue(); - if(experiencePoints > 0) - { - unsigned int PP = AddExperiencePoints(experiencePoints); - if(GetActor() && GetActor()->GetClientID()) - { - if(PP > 0) - { - csString message; - message.Format("You gained some experience points and %d progression points!", PP); - psserver->SendSystemInfo(GetActor()->GetClientID(), message.GetData()); - } - else - { - psserver->SendSystemInfo(GetActor()->GetClientID(),"You gained some experience points"); - } - } - } + unsigned int experiencePoints = env.Lookup("Exp")->GetValue(); + AddExperiencePointsNotify(experiencePoints); + if (CacheManager::GetSingleton().GetSkillByID((PSSKILL)skill)) //check if skill is valid { Skills().AddSkillPractice(skill, practicePoints); } return experiencePoints; } - return practicePoints; + return 0; } void psCharacter::SetSpouseName( const char* name ) Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/bulkobjects/pscharacter.h 2009-05-01 09:20:27 UTC (rev 3596) @@ -830,6 +830,7 @@ unsigned int GetExperiencePoints(); // W void SetExperiencePoints(unsigned int W); unsigned int AddExperiencePoints(unsigned int W); + unsigned int AddExperiencePointsNotify(unsigned int W); unsigned int CalculateAddExperience(PSSKILL skill, unsigned int awardedPoints, float modifier = 1); unsigned int GetProgressionPoints(); // X void SetProgressionPoints(unsigned int X,bool save); Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/database/mysql/math_scripts.sql 2009-05-01 09:20:27 UTC (rev 3596) @@ -154,6 +154,11 @@ ResultModifier = if(Success, 25, 2); "); +INSERT INTO math_scripts VALUES( "Calculate Trasformation Experience", +" +Exp = if(StartQuality < CurrentQuality, 2*(CurrentQuality-StartQuality), 0); +"); + INSERT INTO math_scripts VALUES( "Calculate Skill Experience", " Exp = PracticePoints*Modifier; Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2009-05-01 09:20:27 UTC (rev 3596) @@ -1184,6 +1184,11 @@ Exp = PracticePoints*Modifier; "); +INSERT INTO math_scripts VALUES( "Calculate Trasformation Experience", +" +Exp = if(StartQuality < CurrentQuality, 2*(CurrentQuality-StartQuality), 0); +"); + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/workmanager.cpp 2009-05-01 09:20:27 UTC (rev 3596) @@ -132,7 +132,8 @@ calc_repair_quality = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Quality"); calc_repair_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Repair Experience"); calc_mining_chance = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Odds"); - calc_mining_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Experience"); + calc_mining_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Mining Experience"); + calc_transform_exp = psserver->GetMathScriptEngine()->FindScript("Calculate Trasformation Experience"); calc_lockpick_time = psserver->GetMathScriptEngine()->FindScript("Lockpicking Time"); if (!calc_repair_rank) @@ -163,6 +164,10 @@ { Error1("Could not find mathscript 'Calculate Mining Experience'"); } + if (!calc_transform_exp) + { + Error1("Could not find mathscript 'Calculate Trasformation Experience'"); + } if (!calc_lockpick_time) { Error1("Could not find mathscript 'Lockpicking Time'"); @@ -3678,17 +3683,24 @@ break; } } -///TODO: CHANGE + // Calculate and apply experience points - if (result > 0 && startQuality < currentQuality) + if (result > 0) { - unsigned int ppGained = owner->AddExperiencePoints(2*(int)(currentQuality-startQuality)); - if ( ppGained > 0 ) - psserver->SendSystemInfo(clientNum,"You gained some experience points and a progression point!"); - else - psserver->SendSystemInfo(clientNum,"You gained some experience points"); - Debug2(LOG_TRADE, clientNum, "Giving experience points %i.\n",(2*(int)(currentQuality-startQuality))); - if (secure) psserver->SendSystemInfo(clientNum,"Giving experience points %i.",(2*(int)(currentQuality-startQuality))); + unsigned int experiencePoints; + { + MathEnvironment env; + env.Define("StartQuality", startQuality); + env.Define("CurrentQuality", currentQuality); + env.Define("Character", owner); + calc_transform_exp->Evaluate(&env); + experiencePoints = env.Lookup("Exp")->GetValue(); + } + + owner->AddExperiencePointsNotify(experiencePoints); + + Debug2(LOG_TRADE, clientNum, "Giving experience points %i.\n",experiencePoints); + if (secure) psserver->SendSystemInfo(clientNum,"Giving experience points %i.",experiencePoints); } // Let the user know the we have done something Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2009-04-30 20:03:25 UTC (rev 3595) +++ trunk/src/server/workmanager.h 2009-05-01 09:20:27 UTC (rev 3596) @@ -271,6 +271,7 @@ MathScript *calc_repair_exp; ///< This is the calculation for the experience to assign to player for repairing. MathScript *calc_mining_chance; ///< This is the calculation for chance of successful mining. MathScript *calc_mining_exp; ///< This is the calculation for the experience to assign to player for mining. + MathScript *calc_transform_exp; ///< This is the calculation for the experience to assign to player for trasformations. MathScript *calc_lockpick_time; ///< This is the calculation for how long it takes to pick a lock. void HandleLockPick(MsgEntry* me,Client *client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |