From: <mg...@us...> - 2009-09-22 13:30:50
|
Revision: 4478 http://planeshift.svn.sourceforge.net/planeshift/?rev=4478&view=rev Author: mgist Date: 2009-09-22 13:30:43 +0000 (Tue, 22 Sep 2009) Log Message: ----------- - Some files which didn't commit for some reason. Modified Paths: -------------- trunk/src/server/bulkobjects/psitemstats.h trunk/src/server/bulkobjects/psquest.h trunk/src/server/bulkobjects/psraceinfo.h Modified: trunk/src/server/bulkobjects/psitemstats.h =================================================================== --- trunk/src/server/bulkobjects/psitemstats.h 2009-09-22 13:21:16 UTC (rev 4477) +++ trunk/src/server/bulkobjects/psitemstats.h 2009-09-22 13:30:43 UTC (rev 4478) @@ -429,7 +429,7 @@ csPDelArray<psItemAnimation> *anim_list; // These temporary fields point to strings used for the mesh, texture, part and image names respectively - const char *mesh_name; + csString mesh_name; /// Stores a texture change csString texture_name; @@ -440,7 +440,7 @@ /// Stores the new mesh to be attached on a mesh change. csString partmesh_name; - const char *image_name; + csString image_name; /* mesh names, texture names, texture part names, and image names are currently stored as strings * on the server and passed over to the client in normal communication. This is inefficient, and Modified: trunk/src/server/bulkobjects/psquest.h =================================================================== --- trunk/src/server/bulkobjects/psquest.h 2009-09-22 13:21:16 UTC (rev 4477) +++ trunk/src/server/bulkobjects/psquest.h 2009-09-22 13:30:43 UTC (rev 4478) @@ -117,7 +117,7 @@ int id; csString name; csString task; - const char *image; + csString image; int flags; psQuest *parent_quest; int step_id; Modified: trunk/src/server/bulkobjects/psraceinfo.h =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.h 2009-09-22 13:21:16 UTC (rev 4477) +++ trunk/src/server/bulkobjects/psraceinfo.h 2009-09-22 13:30:43 UTC (rev 4478) @@ -69,8 +69,8 @@ PSCHARACTER_GENDER gender; - const char *mesh_name; - const char *base_texture_name; + csString mesh_name; + csString base_texture_name; csVector3 size; int initialCP; int natural_armor_id; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-01-30 10:12:58
|
Revision: 5417 http://planeshift.svn.sourceforge.net/planeshift/?rev=5417&view=rev Author: weltall2 Date: 2010-01-30 10:12:49 +0000 (Sat, 30 Jan 2010) Log Message: ----------- changed a function to float Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/bulkobjects/psitem.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2010-01-29 19:14:09 UTC (rev 5416) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2010-01-30 10:12:49 UTC (rev 5417) @@ -1213,9 +1213,9 @@ return total; } -uint32 psCharacterInventory::GetContainedSize(psItem *container) +float psCharacterInventory::GetContainedSize(psItem *container) { - uint32 total=0; + float total=0; gemContainer *cont = dynamic_cast<gemContainer*> (container->GetGemObject()); if(cont) { Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2010-01-29 19:14:09 UTC (rev 5416) +++ trunk/src/server/bulkobjects/pscharinventory.h 2010-01-30 10:12:49 UTC (rev 5417) @@ -350,7 +350,7 @@ size_t GetContainedItemCount(psItem *container); float GetContainedWeight(psItem *container); - uint32 GetContainedSize(psItem *container); + float GetContainedSize(psItem *container); /// Uses Mathscript formulas to determine the proper max weight and max space limits void CalculateLimits(); Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2010-01-29 19:14:09 UTC (rev 5416) +++ trunk/src/server/bulkobjects/psitem.cpp 2010-01-30 10:12:49 UTC (rev 5417) @@ -2710,7 +2710,7 @@ csString desc( GetDescription() ); // FIXME: This function is called for world containers too... - desc.AppendFmt("\n\nWeight: %.2f\nCapacity: %u/%u", + desc.AppendFmt("\n\nWeight: %.2f\nCapacity: %.2f/%u", client->GetCharacterData()->Inventory().GetContainedWeight(this), client->GetCharacterData()->Inventory().GetContainedSize(this), GetContainerMaxSize() ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-02-07 12:42:02
|
Revision: 5465 http://planeshift.svn.sourceforge.net/planeshift/?rev=5465&view=rev Author: weltall2 Date: 2010-02-07 12:41:55 +0000 (Sun, 07 Feb 2010) Log Message: ----------- fixed basecloths not being set correctly when defined otherwise. fixed an int being used for an uint32 Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/psraceinfo.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2010-02-07 02:14:11 UTC (rev 5464) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2010-02-07 12:41:55 UTC (rev 5465) @@ -53,6 +53,7 @@ #include "psguildinfo.h" #include "adminmanager.h" #include "psmerchantinfo.h" +#include "psraceinfo.h" psCharacterInventory::psCharacterInventory(psCharacter *ownr) { @@ -86,7 +87,11 @@ owner = ownr; // Load basecloths. Default item equipped in clothing/armour slots. - psItemStats *basecloth = CacheManager::GetSingleton().GetBasicItemStatsByName("basecloths"); + psItemStats *basecloth; + if(owner && owner->GetRaceInfo() && owner->GetRaceInfo()->GetNaturalArmorID() != 0) + basecloth = CacheManager::GetSingleton().GetBasicItemStatsByID(owner->GetRaceInfo()->GetNaturalArmorID()); + else + basecloth = CacheManager::GetSingleton().GetBasicItemStatsByName("basecloths"); psItem *basecloths = basecloth->InstantiateBasicItem(); basecloths->SetOwningCharacter(owner); Modified: trunk/src/server/bulkobjects/psraceinfo.h =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.h 2010-02-07 02:14:11 UTC (rev 5464) +++ trunk/src/server/bulkobjects/psraceinfo.h 2010-02-07 12:41:55 UTC (rev 5465) @@ -74,7 +74,7 @@ csString base_texture_name; csVector3 size; int initialCP; - int natural_armor_id; + uint32 natural_armor_id; float runMinSpeed,runBaseSpeed,runMaxSpeed; float walkMinSpeed,walkBaseSpeed,walkMaxSpeed; float scale; ///< The scale override of this race @@ -121,6 +121,8 @@ const char *GetCloakGroup() { return CloakGroup.GetDataSafe(); } const char *GetMounterAnim() { return MounterAnim.GetDataSafe(); } + + uint32 GetNaturalArmorID() { return natural_armor_id; } float GetSpeedModifier() { return speedModifier; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-02-07 14:58:02
|
Revision: 5468 http://planeshift.svn.sourceforge.net/planeshift/?rev=5468&view=rev Author: weltall2 Date: 2010-02-07 14:57:56 +0000 (Sun, 07 Feb 2010) Log Message: ----------- reworked last commit to actually work Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2010-02-07 14:08:34 UTC (rev 5467) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2010-02-07 14:57:56 UTC (rev 5468) @@ -945,6 +945,9 @@ 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))); + + //as we are changing or obtaining for the first time a race set the inventory correctly for this + inventory.SetBasicArmor(raceinfo); } void psCharacter::SetFamiliarID(PID v) Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2010-02-07 14:08:34 UTC (rev 5467) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2010-02-07 14:57:56 UTC (rev 5468) @@ -86,22 +86,9 @@ owner = ownr; - // Load basecloths. Default item equipped in clothing/armour slots. - psItemStats *basecloth; - if(owner && owner->GetRaceInfo() && owner->GetRaceInfo()->GetNaturalArmorID() != 0) - basecloth = CacheManager::GetSingleton().GetBasicItemStatsByID(owner->GetRaceInfo()->GetNaturalArmorID()); - else - basecloth = CacheManager::GetSingleton().GetBasicItemStatsByName("basecloths"); - psItem *basecloths = basecloth->InstantiateBasicItem(); - basecloths->SetOwningCharacter(owner); - - equipment[PSCHARACTER_SLOT_ARMS].default_if_empty = basecloths; - equipment[PSCHARACTER_SLOT_BOOTS].default_if_empty = basecloths; - equipment[PSCHARACTER_SLOT_GLOVES].default_if_empty = basecloths; - equipment[PSCHARACTER_SLOT_HELM].default_if_empty = basecloths; - equipment[PSCHARACTER_SLOT_TORSO].default_if_empty = basecloths; - equipment[PSCHARACTER_SLOT_LEGS].default_if_empty = basecloths; - + //as a beginning we set a basic armor. + SetBasicArmor(NULL); + doRestrictions = false; loaded = false; inExchangeMode = false; @@ -121,6 +108,33 @@ inventory.DeleteAll(); } +void psCharacterInventory::SetBasicArmor(psRaceInfo *race) +{ + // Load basecloths. Default item equipped in clothing/armour slots. + psItemStats *basecloth; + if(race && race->GetNaturalArmorID() != 0) + basecloth = CacheManager::GetSingleton().GetBasicItemStatsByID(owner->GetRaceInfo()->GetNaturalArmorID()); + else + basecloth = CacheManager::GetSingleton().GetBasicItemStatsByName("basecloths"); + + //delete the basecloth if it was already loaded. + if(equipment[PSCHARACTER_SLOT_ARMS].default_if_empty) + delete equipment[PSCHARACTER_SLOT_ARMS].default_if_empty; + + //make a new one + psItem* basecloths = basecloth->InstantiateBasicItem(); + basecloths->SetOwningCharacter(owner); + + //assign it + equipment[PSCHARACTER_SLOT_ARMS].default_if_empty = basecloths; + equipment[PSCHARACTER_SLOT_BOOTS].default_if_empty = basecloths; + equipment[PSCHARACTER_SLOT_GLOVES].default_if_empty = basecloths; + equipment[PSCHARACTER_SLOT_HELM].default_if_empty = basecloths; + equipment[PSCHARACTER_SLOT_TORSO].default_if_empty = basecloths; + equipment[PSCHARACTER_SLOT_LEGS].default_if_empty = basecloths; + +} + void psCharacterInventory::CalculateLimits() { MathEnvironment env; // safe enough to reuse it for both...faster... Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2010-02-07 14:08:34 UTC (rev 5467) +++ trunk/src/server/bulkobjects/pscharinventory.h 2010-02-07 14:57:56 UTC (rev 5468) @@ -49,6 +49,7 @@ class psItemStats; class psItem; class gemContainer; +struct psRaceInfo; @@ -436,7 +437,14 @@ /// Update encumbrance/OVERWEIGHT mode to match current status. void UpdateEncumbrance(); + + /** Sets the basic armor when not equipped depending on the passed race. + * @note if race is NULL or the armor group is 0 it will set the basicloths else the defined ones. + * @param race Pointer to the race to use to set the basic armor. + */ + void SetBasicArmor(psRaceInfo *race); + private: void WriteItem(csRef<iDocumentNode> equipmentNode, psItem* item, int bulk, INVENTORY_SLOT_NUMBER slot); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-07 17:26:11
|
Revision: 5466 http://planeshift.svn.sourceforge.net/planeshift/?rev=5466&view=rev Author: Khakilord Date: 2010-02-07 12:45:18 +0000 (Sun, 07 Feb 2010) Log Message: ----------- Replaced macro with function to make function clearer. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2010-02-07 12:41:55 UTC (rev 5465) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2010-02-07 12:45:18 UTC (rev 5466) @@ -1869,12 +1869,19 @@ return weapon->GetCounterBlockValue(); } -#define ARMOR_USES_SKILL(slot,skill) inventory.GetInventoryItem(slot)==NULL?inventory.GetEquipmentObject(slot).default_if_empty->GetArmorType()==skill:inventory.GetInventoryItem(slot)->GetArmorType()==skill +bool psCharacter::ArmorUsesSkill(INVENTORY_SLOT_NUMBER slot, PSITEMSTATS_ARMORTYPE skill) +{ + if (inventory.GetInventoryItem(slot)==NULL) + return inventory.GetEquipmentObject(slot).default_if_empty->GetArmorType()==skill; + else + return inventory.GetInventoryItem(slot)->GetArmorType()==skill; +} -#define CALCULATE_ARMOR_FOR_SLOT(slot) \ - if (ARMOR_USES_SKILL(slot,PSITEMSTATS_ARMORTYPE_LIGHT)) light_p+=1.0f/6.0f; \ - if (ARMOR_USES_SKILL(slot,PSITEMSTATS_ARMORTYPE_MEDIUM)) med_p+=1.0f/6.0f; \ - if (ARMOR_USES_SKILL(slot,PSITEMSTATS_ARMORTYPE_HEAVY)) heavy_p+=1.0f/6.0f; +void psCharacter::CalculateArmorForSlot(INVENTORY_SLOT_NUMBER slot, float& heavy_p, float& med_p, float& light_p) { + if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_LIGHT)) light_p+=1.0f/6.0f; + if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_MEDIUM)) med_p+=1.0f/6.0f; + if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_HEAVY)) heavy_p+=1.0f/6.0f; +} float psCharacter::GetDodgeValue() @@ -1885,12 +1892,12 @@ // hold the % of each type of armor worn heavy_p=med_p=light_p=0.0f; - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_HELM); - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_TORSO); - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_ARMS); - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_GLOVES); - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_LEGS); - CALCULATE_ARMOR_FOR_SLOT(PSCHARACTER_SLOT_BOOTS); + CalculateArmorForSlot(PSCHARACTER_SLOT_HELM, heavy_p, med_p, light_p); + CalculateArmorForSlot(PSCHARACTER_SLOT_TORSO, heavy_p, med_p, light_p); + CalculateArmorForSlot(PSCHARACTER_SLOT_ARMS, heavy_p, med_p, light_p); + CalculateArmorForSlot(PSCHARACTER_SLOT_GLOVES, heavy_p, med_p, light_p); + CalculateArmorForSlot(PSCHARACTER_SLOT_LEGS, heavy_p, med_p, light_p); + CalculateArmorForSlot(PSCHARACTER_SLOT_BOOTS, heavy_p, med_p, light_p); // multiplies for skill heavy_p *= skills.GetSkillRank(PSSKILL_HEAVYARMOR).Current(); Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2010-02-07 12:41:55 UTC (rev 5465) +++ trunk/src/server/bulkobjects/pscharacter.h 2010-02-07 12:45:18 UTC (rev 5466) @@ -875,8 +875,10 @@ /** Some races share cloaks so this tells which group it's in. If empty assume in racial group.*/ csString CloakGroup; - + bool banker; ///< Whether or not the character is a banker + void CalculateArmorForSlot(INVENTORY_SLOT_NUMBER slot, float& heavy_p, float& med_p, float& light_p); + bool ArmorUsesSkill(INVENTORY_SLOT_NUMBER slot, PSITEMSTATS_ARMORTYPE skill); public: void RecalculateStats(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-03-13 22:40:11
|
Revision: 5685 http://planeshift.svn.sourceforge.net/planeshift/?rev=5685&view=rev Author: weltall2 Date: 2010-03-13 22:40:05 +0000 (Sat, 13 Mar 2010) Log Message: ----------- fixed bug intruced by rlydontknow in storage loading patch by rlydontknow Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2010-03-13 20:56:46 UTC (rev 5684) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2010-03-13 22:40:05 UTC (rev 5685) @@ -292,6 +292,8 @@ if (location == PSCHARACTER_SLOT_STORAGE) { AddStorageItem(item);//we have found a storage item so we store it in there. + if (!item) + continue; } else if (!AddLoadedItem(items[i].GetUInt32("parent_item_id"),location, item) ) { @@ -355,7 +357,7 @@ } } -void psCharacterInventory::AddStorageItem(psItem *item) +void psCharacterInventory::AddStorageItem(psItem *& item) { if (item->GetIsStackable()) { @@ -366,6 +368,7 @@ if (storedItem->CheckStackableWith(item, true, true)) // item fits completely { storedItem->CombineStack(item); + item = NULL; return; } else if (storedItem->GetStackCount() != MAX_STACK_COUNT && storedItem->CheckStackableWith(item, true, false)) // item fits only partially Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2010-03-13 20:56:46 UTC (rev 5684) +++ trunk/src/server/bulkobjects/pscharinventory.h 2010-03-13 22:40:05 UTC (rev 5685) @@ -169,7 +169,7 @@ * The item will be accessible only from storage npc. * @param item The item to be added to the storage. */ - void AddStorageItem(psItem *item); + void AddStorageItem(psItem *& item); /** Check to see if the player has the ability to carry and additional weight. * @param requiedWeight The amount of weight that we want to check. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-04-10 07:19:12
|
Revision: 5796 http://planeshift.svn.sourceforge.net/planeshift/?rev=5796&view=rev Author: weltall2 Date: 2010-04-10 07:19:06 +0000 (Sat, 10 Apr 2010) Log Message: ----------- fixed dictionary trigger search for recent cs. NOTE: need at least cs 33879 Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2010-04-09 19:03:29 UTC (rev 5795) +++ trunk/src/server/bulkobjects/dictionary.cpp 2010-04-10 07:19:06 UTC (rev 5796) @@ -89,7 +89,7 @@ csHash<NpcTriggerGroupEntry*, csString>::GlobalIterator triggergroupIter(trigger_groups.GetIterator()); while(triggergroupIter.HasNext()) delete triggergroupIter.Next(); - csRedBlackTree<NpcTrigger*>::Iterator triggerIter(triggers.GetIterator()); + NpcTriggerTree::Iterator triggerIter(triggers.GetIterator()); while(triggerIter.HasNext()) delete triggerIter.Next(); csHash<NpcResponse*>::GlobalIterator responsesIter(responses.GetIterator()); @@ -923,7 +923,7 @@ if (area!=NULL && strlen(area)) { CPrintf(CON_CMDOUTPUT ,"----------- Triggers/Responses of area %s----------\n",area); - csRedBlackTree<NpcTrigger*>::Iterator trig_iter(triggers.GetIterator()); + NpcTriggerTree::Iterator trig_iter(triggers.GetIterator()); NpcTrigger * trig; while(trig_iter.HasNext()) { @@ -951,7 +951,7 @@ } CPrintf(CON_CMDOUTPUT ,"----------- All Triggers ----------\n"); - csRedBlackTree<NpcTrigger*>::Iterator trig_iter(triggers.GetIterator()); + NpcTriggerTree::Iterator trig_iter(triggers.GetIterator()); NpcTrigger * trig; while(trig_iter.HasNext()) { @@ -1142,22 +1142,15 @@ priorresponseID==other.priorresponseID); }; -bool NpcTrigger::operator<(const NpcTrigger& other) const +bool NpcTrigger::operator<=(const NpcTrigger& other) const { - if (strcmp(area,other.area)<0) - return true; if (strcmp(area,other.area)>0) return false; - - if (strcmp(trigger,other.trigger)<0) - return true; if (strcmp(trigger,other.trigger)>0) return false; - - if (priorresponseID<other.priorresponseID) - return true; - - return false; + if (priorresponseID>other.priorresponseID) + return false; + return true; }; Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2010-04-09 19:03:29 UTC (rev 5795) +++ trunk/src/server/bulkobjects/dictionary.h 2010-04-10 07:19:06 UTC (rev 5796) @@ -58,13 +58,22 @@ struct iDocumentNode; struct Faction; +template<typename K, typename K2> class NpcTriggerOrdering : public CS::Container::RedBlackTreeOrderingPartial<NpcTrigger,NpcTrigger> +{ +public: + NpcTriggerOrdering(NpcTrigger* const& a, NpcTrigger* const& b) : CS::Container::RedBlackTreeOrderingPartial<NpcTrigger,NpcTrigger>(*a,*b) + { + } +}; + class NPCDialogDict : public csRefCount { protected: + typedef csRedBlackTree<NpcTrigger*, CS::Container::DefaultRedBlackTreeAllocator<NpcTrigger*>, NpcTriggerOrdering> NpcTriggerTree; csHash<NpcTerm*, csString> phrases; csHash<NpcTriggerGroupEntry*, csString> trigger_groups; csHash<NpcTriggerGroupEntry*> trigger_groups_by_id; - csRedBlackTree<NpcTrigger*> triggers; + NpcTriggerTree triggers; csHash<NpcTrigger*> trigger_by_id; csHash<NpcResponse*> responses; csHash<bool, csString> disallowed_words; @@ -232,16 +241,6 @@ } }; -template<> -class csComparator<NpcTrigger* , NpcTrigger*> -{ -public: - static int Compare(NpcTrigger* const &r1, NpcTrigger* const &r2) - { - return csComparator<NpcTrigger, NpcTrigger>::Compare(*r1, *r2); - } -}; - class NpcTrigger { public: @@ -265,7 +264,7 @@ bool operator==(const NpcTrigger& other) const; /// Compare two triggers. Used when searching for triggers. - bool operator<(const NpcTrigger& other) const; + bool operator<=(const NpcTrigger& other) const; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-05-02 15:47:16
|
Revision: 5852 http://planeshift.svn.sourceforge.net/planeshift/?rev=5852&view=rev Author: weltall2 Date: 2010-05-02 15:47:10 +0000 (Sun, 02 May 2010) Log Message: ----------- fixed cpu overabuse by rbtree patch by rlydontknow Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2010-05-02 14:13:10 UTC (rev 5851) +++ trunk/src/server/bulkobjects/dictionary.cpp 2010-05-02 15:47:10 UTC (rev 5852) @@ -1146,10 +1146,14 @@ { if (area > other.area) return false; - if (trigger > other.trigger) - return false; - if (priorresponseID>other.priorresponseID) - return false; + if (area == other.area) + { + if (trigger > other.trigger) + return false; + if (trigger == other.trigger && + priorresponseID > other.priorresponseID) + return false; + } return true; }; Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2010-05-02 14:13:10 UTC (rev 5851) +++ trunk/src/server/bulkobjects/dictionary.h 2010-05-02 15:47:10 UTC (rev 5852) @@ -58,10 +58,10 @@ struct iDocumentNode; struct Faction; -template<typename K, typename K2> class NpcTriggerOrdering : public CS::Container::RedBlackTreeOrderingPartial<NpcTrigger,NpcTrigger> +template<typename K, typename K2> class NpcTriggerOrdering : public CS::Container::RedBlackTreeOrderingTotal<NpcTrigger,NpcTrigger> { public: - NpcTriggerOrdering(NpcTrigger* const& a, NpcTrigger* const& b) : CS::Container::RedBlackTreeOrderingPartial<NpcTrigger,NpcTrigger>(*a,*b) + NpcTriggerOrdering(NpcTrigger* const& a, NpcTrigger* const& b) : CS::Container::RedBlackTreeOrderingTotal<NpcTrigger,NpcTrigger>(*a,*b) { } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-01 23:19:10
|
Revision: 6114 http://planeshift.svn.sourceforge.net/planeshift/?rev=6114&view=rev Author: rlydontknow Date: 2010-08-01 23:19:04 +0000 (Sun, 01 Aug 2010) Log Message: ----------- made psSectorInfo a scriptable with the following properties: - uid - interior (checks whether downfall is disabled for this sector) made psCharacter:sector return a scriptable var instead of the uid Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pssectorinfo.cpp trunk/src/server/bulkobjects/pssectorinfo.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2010-08-01 21:35:41 UTC (rev 6113) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2010-08-01 23:19:04 UTC (rev 6114) @@ -2972,7 +2972,7 @@ } else if (!strcasecmp(ptr,"sector")) { - return location.loc_sector->uid; + return (double)(intptr_t)(location.loc_sector); } else if (!strcasecmp(ptr,"owner")) { Modified: trunk/src/server/bulkobjects/pssectorinfo.cpp =================================================================== --- trunk/src/server/bulkobjects/pssectorinfo.cpp 2010-08-01 21:35:41 UTC (rev 6113) +++ trunk/src/server/bulkobjects/pssectorinfo.cpp 2010-08-01 23:19:04 UTC (rev 6114) @@ -92,5 +92,23 @@ return psserver->GetRandom(lightning_max_gap - lightning_min_gap) + lightning_min_gap; } +double psSectorInfo::GetProperty(const char *ptr) +{ + csString prop(ptr); + if(prop == "interior") + { + return (double)!rain_enabled; + } + else if(prop == "uid") + { + return (double)uid; + } + return 0; +} +double psSectorInfo::CalcFunction(const char * functionName, const double * params) +{ + return 0; +} + Modified: trunk/src/server/bulkobjects/pssectorinfo.h =================================================================== --- trunk/src/server/bulkobjects/pssectorinfo.h 2010-08-01 21:35:41 UTC (rev 6113) +++ trunk/src/server/bulkobjects/pssectorinfo.h 2010-08-01 23:19:04 UTC (rev 6114) @@ -26,6 +26,7 @@ //============================================================================= #include <csutil/csstring.h> #include <csgeom/vector3.h> +#include "util/scriptvar.h" //============================================================================= // Project Includes @@ -44,7 +45,7 @@ * * */ -class psSectorInfo +class psSectorInfo : public iScriptableVar { public: psSectorInfo(); @@ -57,6 +58,11 @@ unsigned int GetRandomRainFadeOut(); unsigned int GetRandomLightningGap(); + /// This is used by the math scripting engine to get various values. + double GetProperty(const char *ptr); + double CalcFunction(const char * functionName, const double * params); + const char *ToString() { return name.GetDataSafe(); } + bool GetIsColliding() { return is_colliding; } bool GetIsNonTransient() { return is_non_transient; } /** Checks if this is set as a teleporting sector. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-03 22:21:26
|
Revision: 6123 http://planeshift.svn.sourceforge.net/planeshift/?rev=6123&view=rev Author: rlydontknow Date: 2010-08-03 22:21:20 +0000 (Tue, 03 Aug 2010) Log Message: ----------- let psitem and pscharacter use the new way to pack pointers Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psitem.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2010-08-03 22:20:32 UTC (rev 6122) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2010-08-03 22:21:20 UTC (rev 6123) @@ -2972,7 +2972,7 @@ } else if (!strcasecmp(ptr,"sector")) { - return (double)(intptr_t)(location.loc_sector); + return MathScriptEngine::GetValue(location.loc_sector); } else if (!strcasecmp(ptr,"owner")) { @@ -3096,7 +3096,7 @@ item = inventory.GetEquipmentObject(slot).default_if_empty; } - return (double)(intptr_t)item;; + return MathScriptEngine::GetValue(item);; } else if (!strcasecmp(functionName, "GetArmorSkill")) { Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2010-08-03 22:20:32 UTC (rev 6122) +++ trunk/src/server/bulkobjects/psitem.cpp 2010-08-03 22:21:20 UTC (rev 6123) @@ -2044,7 +2044,7 @@ } else if (!strcasecmp(ptr,"Owner")) { - return (double)(intptr_t)owning_character; + return MathScriptEngine::GetValue(owning_character); } else if (!strcasecmp(ptr,"ArmorType")) { @@ -2062,7 +2062,7 @@ if (!strcasecmp(functionName, "GetArmorVSWeaponResistance")) { psItem *weapon = this; - psItem *armor = (psItem *)(intptr_t)params[0]; + psItem *armor = dynamic_cast<psItem*>(MathScriptEngine::GetPointer(params[0])); // if no armor return 1 if (!armor) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-10-14 08:45:03
|
Revision: 6290 http://planeshift.svn.sourceforge.net/planeshift/?rev=6290&view=rev Author: weltall2 Date: 2010-10-14 08:44:56 +0000 (Thu, 14 Oct 2010) Log Message: ----------- allowed psTradeProcesses to be used as a scriptable var in scripts Modified Paths: -------------- trunk/src/server/bulkobjects/pstrade.cpp trunk/src/server/bulkobjects/pstrade.h Modified: trunk/src/server/bulkobjects/pstrade.cpp =================================================================== --- trunk/src/server/bulkobjects/pstrade.cpp 2010-10-13 20:37:33 UTC (rev 6289) +++ trunk/src/server/bulkobjects/pstrade.cpp 2010-10-14 08:44:56 UTC (rev 6290) @@ -128,7 +128,7 @@ equipmentId = 0; constraints .Clear(); garbageId = 0; - garbageQty = 0; + garbageQty = 0; priSkillId = 0; minPriSkill = 0; maxPriSkill = 0; @@ -142,11 +142,68 @@ renderEffect.Clear(); } - psTradeProcesses::~psTradeProcesses() { } +const char* psTradeProcesses::ToString() +{ + return name.GetData(); +} + +double psTradeProcesses::CalcFunction(const char * functionName, const double * params) +{ + return 0; +} + +double psTradeProcesses::GetProperty(const char *ptr) +{ + if (!strcasecmp(ptr,"PrimarySkillId")) + { + return GetPrimarySkillId(); + } + if (!strcasecmp(ptr,"MaxPrimarySkill")) + { + return GetMaxPrimarySkill(); + } + if (!strcasecmp(ptr,"MinPrimarySkill")) + { + return GetMinPrimarySkill(); + } + if (!strcasecmp(ptr,"PrimarySkillQualityFactor")) + { + return GetPrimaryQualFactor(); + } + if (!strcasecmp(ptr,"PrimarySkillPracticePoints")) + { + return GetPrimaryPracticePts(); + } + if (!strcasecmp(ptr,"SecondarySkillId")) + { + return GetSecondarySkillId(); + } + if (!strcasecmp(ptr,"MaxSecondarySkill")) + { + return GetMaxSecondarySkill(); + } + if (!strcasecmp(ptr,"MinSecondarySkill")) + { + return GetMinSecondarySkill(); + } + if (!strcasecmp(ptr,"SecondarySkillQualityFactor")) + { + return GetSecondaryQualFactor(); + } + if (!strcasecmp(ptr,"SecondarySkillPracticePoints")) + { + return GetSecondaryPracticePts(); + } + + Error2("Requested psTradeProcesses property not found '%s'", ptr); + return 0; +} + + bool psTradeProcesses::Load(iResultRow& row) { processId = row.GetUInt32("process_id"); Modified: trunk/src/server/bulkobjects/pstrade.h =================================================================== --- trunk/src/server/bulkobjects/pstrade.h 2010-10-13 20:37:33 UTC (rev 6289) +++ trunk/src/server/bulkobjects/pstrade.h 2010-10-14 08:44:56 UTC (rev 6290) @@ -124,7 +124,7 @@ * This class holds the master list of all trade processes possible in the game. * This class is read only since it is cached and shared by multiple users. */ -class psTradeProcesses +class psTradeProcesses : public iScriptableVar { public: psTradeProcesses(); @@ -152,6 +152,22 @@ int GetSecondaryPracticePts() const { return secPracticePts; } int GetSecondaryQualFactor() const { return secQualFactor; } csString& GetRenderEffect() { return renderEffect; } + + /** Returns the name of the current process. + * @note Needed for iScriptableVar. + * @return the name of the process. + */ + const char* ToString(); + + ///Needed for iScriptableVar. Does nothing right now just returns 0 for anything passed. + double CalcFunction(const char * functionName, const double * params); + + /** Returns the requested variable stored in this process. + * @note Needed for iScriptableVar. + * @param ptr A pointer to a char array stating the requested variable. + * @return A double with the value of the requested variable. + */ + double GetProperty(const char *ptr); protected: uint32 processId; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-12-31 21:45:35
|
Revision: 6670 http://planeshift.svn.sourceforge.net/planeshift/?rev=6670&view=rev Author: weltall2 Date: 2010-12-31 21:45:29 +0000 (Fri, 31 Dec 2010) Log Message: ----------- added some scriptable vars Modified Paths: -------------- trunk/src/server/bulkobjects/psitemstats.cpp trunk/src/server/bulkobjects/pstrade.cpp trunk/src/server/bulkobjects/pstrade.h Modified: trunk/src/server/bulkobjects/psitemstats.cpp =================================================================== --- trunk/src/server/bulkobjects/psitemstats.cpp 2010-12-31 18:33:24 UTC (rev 6669) +++ trunk/src/server/bulkobjects/psitemstats.cpp 2010-12-31 21:45:29 UTC (rev 6670) @@ -1672,11 +1672,9 @@ { return (double) GetQuality(); } - else - { - CPrintf(CON_ERROR, "psItemStats::GetProperty(%s) failed\n",ptr); - return 0; - } + + CPrintf(CON_ERROR, "psItemStats::GetProperty(%s) failed\n",ptr); + return 0; } double psItemStats::CalcFunction(MathEnvironment* env, const char * functionName, const double * params) Modified: trunk/src/server/bulkobjects/pstrade.cpp =================================================================== --- trunk/src/server/bulkobjects/pstrade.cpp 2010-12-31 18:33:24 UTC (rev 6669) +++ trunk/src/server/bulkobjects/pstrade.cpp 2010-12-31 21:45:29 UTC (rev 6670) @@ -116,6 +116,29 @@ return true; } +double psTradeTransformations::GetProperty(MathEnvironment* env, const char *ptr) +{ + csString property(ptr); + if (property == "ItemQualityPenaltyPercent") + { + return (double)GetItemQualityPenaltyPercent(); + } + if (property == "TransformPoints") + { + return (double)GetTransPoints(); + } + + CPrintf(CON_ERROR, "psTradeTransformations::GetProperty(%s) failed\n",ptr); + return 0; +} + +double psTradeTransformations::CalcFunction(MathEnvironment* env, const char * functionName, const double * params) +{ + CPrintf(CON_ERROR, "psTradeTransformations::CalcFunction(%s) failed\n", functionName); + return 0; +} + + /////////////////////////////////////////////////////////////////////// // Processes psTradeProcesses::psTradeProcesses() @@ -153,6 +176,7 @@ double psTradeProcesses::CalcFunction(MathEnvironment* env, const char* functionName, const double* params) { + CPrintf(CON_ERROR, "psTradeProcesses::CalcFunction(%s) failed\n", functionName); return 0; } Modified: trunk/src/server/bulkobjects/pstrade.h =================================================================== --- trunk/src/server/bulkobjects/pstrade.h 2010-12-31 18:33:24 UTC (rev 6669) +++ trunk/src/server/bulkobjects/pstrade.h 2010-12-31 21:45:29 UTC (rev 6670) @@ -71,7 +71,7 @@ * This class holds the master list of all trade transformatations possible in the game. * This class is read only since it is cached and shared by multiple users. */ -class psTradeTransformations +class psTradeTransformations : public iScriptableVar { public: psTradeTransformations(); @@ -97,11 +97,28 @@ int GetTransPoints() const { return transPoints; } - // Cache flag is used for garbage collection - // If true transformation is cached and should not be deleted after use - // otherwise it needs to be cleaned up + /**Cache flag is used for garbage collection + * If true transformation is cached and should not be deleted after use + * otherwise it needs to be cleaned up + */ int GetTransformationCacheFlag() { return transCached; } + /** Returns the name of the current process. + * @note Needed for iScriptableVar. + * @return the name of the process. + */ + const char* ToString(); + + ///Needed for iScriptableVar. Does nothing right now just returns 0 for anything passed. + double CalcFunction(MathEnvironment* env, const char* functionName, const double* params); + + /** Returns the requested variable stored in this transform. + * @note Needed for iScriptableVar. + * @param ptr A pointer to a char array stating the requested variable. + * @return A double with the value of the requested variable. + */ + double GetProperty(MathEnvironment* env, const char* ptr); + protected: uint32 id; uint32 patternId; @@ -114,9 +131,10 @@ int transPoints; private: - // Cache flag is used for garbage collection - // If true transformation is cached and should not be deleted after use - // otherwise it needs to be cleaned up + /** Cache flag is used for garbage collection + * If true transformation is cached and should not be deleted after use + * otherwise it needs to be cleaned up + */ bool transCached; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-12-31 21:56:35
|
Revision: 6671 http://planeshift.svn.sourceforge.net/planeshift/?rev=6671&view=rev Author: weltall2 Date: 2010-12-31 21:56:29 +0000 (Fri, 31 Dec 2010) Log Message: ----------- better commenting and fixes Modified Paths: -------------- trunk/src/server/bulkobjects/psitemstats.h trunk/src/server/bulkobjects/pstrade.cpp trunk/src/server/bulkobjects/pstrade.h Modified: trunk/src/server/bulkobjects/psitemstats.h =================================================================== --- trunk/src/server/bulkobjects/psitemstats.h 2010-12-31 21:45:29 UTC (rev 6670) +++ trunk/src/server/bulkobjects/psitemstats.h 2010-12-31 21:56:29 UTC (rev 6671) @@ -736,11 +736,23 @@ ///returns the special command assigned to this item csString GetItemCommand() { return itemCommand; } - double GetProperty(MathEnvironment* env, const char *ptr); - double CalcFunction(MathEnvironment* env, const char * functionName, const double * params); - const char *ToString() { return name.GetDataSafe(); } + /** Returns the name of the item. + * @note Needed for iScriptableVar. + * @return the name of the item. + */ + const char* ToString() { return name.GetDataSafe(); } + ///Needed for iScriptableVar. Does nothing right now just returns 0 for anything passed. + double CalcFunction(MathEnvironment* env, const char* functionName, const double* params); + /** Returns the requested variable stored in this item stats. + * @note Needed for iScriptableVar. + * @param ptr A pointer to a char array stating the requested variable. + * @return A double with the value of the requested variable. + */ + double GetProperty(MathEnvironment* env, const char* ptr); + + public: /// The new operator is overriden to call PoolAllocator template functions Modified: trunk/src/server/bulkobjects/pstrade.cpp =================================================================== --- trunk/src/server/bulkobjects/pstrade.cpp 2010-12-31 21:45:29 UTC (rev 6670) +++ trunk/src/server/bulkobjects/pstrade.cpp 2010-12-31 21:56:29 UTC (rev 6671) @@ -30,6 +30,7 @@ #include "../psserver.h" #include "../cachemanager.h" #include "../globals.h" +#include "util/serverconsole.h" //============================================================================= // Local Includes @@ -137,6 +138,11 @@ CPrintf(CON_ERROR, "psTradeTransformations::CalcFunction(%s) failed\n", functionName); return 0; } + +const char* psTradeTransformations::ToString() +{ + return "transformation"; +} /////////////////////////////////////////////////////////////////////// Modified: trunk/src/server/bulkobjects/pstrade.h =================================================================== --- trunk/src/server/bulkobjects/pstrade.h 2010-12-31 21:45:29 UTC (rev 6670) +++ trunk/src/server/bulkobjects/pstrade.h 2010-12-31 21:56:29 UTC (rev 6671) @@ -103,9 +103,9 @@ */ int GetTransformationCacheFlag() { return transCached; } - /** Returns the name of the current process. + /** Returns the name of the current transform. * @note Needed for iScriptableVar. - * @return the name of the process. + * @return just "transform". */ const char* ToString(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2011-01-02 10:21:18
|
Revision: 6695 http://planeshift.svn.sourceforge.net/planeshift/?rev=6695&view=rev Author: weltall2 Date: 2011-01-02 10:21:12 +0000 (Sun, 02 Jan 2011) Log Message: ----------- added some comments Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitemstats.cpp Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2011-01-02 07:53:29 UTC (rev 6694) +++ trunk/src/server/bulkobjects/psitem.cpp 2011-01-02 10:21:12 UTC (rev 6695) @@ -2249,6 +2249,12 @@ return weapon->GetArmorVSWeaponResistance(armor->GetCurrentStats()); } + //returns to the script a psitemstats object. used to access the base stats + //without the psitem overlay. + if (function == "GetBaseItem") + { + return env->GetValue(GetBaseStats()); + } CPrintf(CON_ERROR, "psItem::CalcFunction(%s) failed\n", functionName); return 0; Modified: trunk/src/server/bulkobjects/psitemstats.cpp =================================================================== --- trunk/src/server/bulkobjects/psitemstats.cpp 2011-01-02 07:53:29 UTC (rev 6694) +++ trunk/src/server/bulkobjects/psitemstats.cpp 2011-01-02 10:21:12 UTC (rev 6695) @@ -1668,6 +1668,7 @@ double psItemStats::GetProperty(MathEnvironment* env, const char *ptr) { csString property(ptr); + //returns the basic quality of this item. if (property == "Quality") { return (double) GetQuality(); @@ -1679,6 +1680,7 @@ double psItemStats::CalcFunction(MathEnvironment* env, const char * functionName, const double * params) { + //we have no functions here yet. CPrintf(CON_ERROR, "psItemStats::CalcFunction(%s) failed\n", functionName); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2011-02-13 10:46:41
|
Revision: 6921 http://planeshift.svn.sourceforge.net/planeshift/?rev=6921&view=rev Author: weltall2 Date: 2011-02-13 10:46:34 +0000 (Sun, 13 Feb 2011) Log Message: ----------- removed constructor of the skillset from the header and moved on the cpp file, removed also some dependencies from the big scary skills enum Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2011-02-13 10:45:15 UTC (rev 6920) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2011-02-13 10:46:34 UTC (rev 6921) @@ -3730,6 +3730,20 @@ return stats[which]; } +SkillSet::SkillSet(psCharacter *self) : CharacterAttribute(self) +{ + for (int i=0; i < psserver->GetCacheManager()->GetSkillAmount(); i++) + { + //generate a new skill + Skill mySkill; + //initialize the new skill + mySkill.Clear(); + mySkill.rank.Initialize(self); + //push the new skill in the skillset + skills.Push(mySkill); + } +} + int SkillSet::AddSkillPractice(PSSKILL skill, unsigned int val) { unsigned int added; Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2011-02-13 10:45:15 UTC (rev 6920) +++ trunk/src/server/bulkobjects/pscharacter.h 2011-02-13 10:46:34 UTC (rev 6921) @@ -103,7 +103,7 @@ PSCHARACTER_MODE_EXHAUSTED, PSCHARACTER_MODE_DEFEATED, PSCHARACTER_MODE_STATUE, - PSCHARACTER_MODE_COUNT, + PSCHARACTER_MODE_COUNT }; enum PSCHARACTER_CUSTOM @@ -323,17 +323,13 @@ class SkillSet : public CharacterAttribute { protected: - Skill skills[PSSKILL_COUNT]; + csArray<Skill> skills; ///< Array to store all the skills. public: - SkillSet(psCharacter *self) : CharacterAttribute(self) - { - for (int i=0; i<PSSKILL_COUNT; i++) - { - skills[i].Clear(); - skills[i].rank.Initialize(self); - } - } + /** Constructor. + * @param self The psCharacter this skillset is associated with. + */ + SkillSet(psCharacter *self); /** @brief Sets the common skill info for this skill ( data from the database ) * @param which The skill we want to set This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2011-02-26 12:38:01
|
Revision: 6994 http://planeshift.svn.sourceforge.net/planeshift/?rev=6994&view=rev Author: weltall2 Date: 2011-02-26 12:37:54 +0000 (Sat, 26 Feb 2011) Log Message: ----------- changed requirements to use a csarray in place of a static array. improved handling of items which have no requirement assigned (less memory and processing overhead at runtime) still needs some improvement on the save/load handling of requirements Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitemstats.cpp trunk/src/server/bulkobjects/psitemstats.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2011-02-26 11:52:13 UTC (rev 6993) +++ trunk/src/server/bulkobjects/psitem.cpp 2011-02-26 12:37:54 UTC (rev 6994) @@ -2466,14 +2466,8 @@ { //keeps the requirement list for use later. csArray<ItemRequirement> requirements; - //get the basic requirements we will have to check both. note this is an array of 3 elements. - ItemRequirement *baseReqs = base_stats->GetRequirements(); - //first copy in the array the requirements coming from the base stats as is. - for(int i = 0; i < 3; i++) - { - if(!baseReqs[i].name.IsEmpty()) - requirements.Push(baseReqs[i]); - } + //get the basic requirements we will have to check both. + requirements = base_stats->GetRequirements(); //check if the requirements in the modded stat, if presents, are higher. //maybe this should be optimized? Modified: trunk/src/server/bulkobjects/psitemstats.cpp =================================================================== --- trunk/src/server/bulkobjects/psitemstats.cpp 2011-02-26 11:52:13 UTC (rev 6993) +++ trunk/src/server/bulkobjects/psitemstats.cpp 2011-02-26 12:37:54 UTC (rev 6994) @@ -594,20 +594,26 @@ SetCategory(category); //set only if there is a valid value - if(row["requirement_1_name"]) + if(row["requirement_1_name"] && strlen(row["requirement_1_name"])) { - reqs[0].name = row["requirement_1_name"]; - reqs[0].min_value = row.GetFloat("requirement_1_value"); + ItemRequirement req; + req.name = row["requirement_1_name"]; + req.min_value = row.GetFloat("requirement_1_value"); + reqs.Push(req); } - if(row["requirement_2_name"]) + if(row["requirement_2_name"] && strlen(row["requirement_2_name"])) { - reqs[1].name = row["requirement_2_name"]; - reqs[1].min_value = row.GetFloat("requirement_2_value"); + ItemRequirement req; + req.name = row["requirement_2_name"]; + req.min_value = row.GetFloat("requirement_2_value"); + reqs.Push(req); } - if(row["requirement_3_name"]) + if(row["requirement_3_name"] && strlen(row["requirement_3_name"])) { - reqs[2].name = row["requirement_3_name"]; - reqs[2].min_value = row.GetFloat("requirement_3_value"); + ItemRequirement req; + req.name = row["requirement_3_name"]; + req.min_value = row.GetFloat("requirement_3_value"); + reqs.Push(req); } psString strTmpAmmoList = row["item_type_id_ammo"]; @@ -950,13 +956,23 @@ update->AddField("cstr_gfx_mesh", mesh_name); //Mesh // stat requirements - update->AddField("requirement_1_name", reqs[0].name); - update->AddField("requirement_1_value", reqs[0].min_value); - update->AddField("requirement_2_name", reqs[1].name); - update->AddField("requirement_2_value", reqs[1].min_value); - update->AddField("requirement_3_name", reqs[2].name); - update->AddField("requirement_3_value", reqs[2].min_value); + if(reqs.GetSize() >= 1) + { + update->AddField("requirement_1_name", reqs[0].name); + update->AddField("requirement_1_value", reqs[0].min_value); + } + if(reqs.GetSize() >= 2) + { + update->AddField("requirement_2_name", reqs[1].name); + update->AddField("requirement_2_value", reqs[1].min_value); + } + if(reqs.GetSize() >= 3) + { + update->AddField("requirement_3_name", reqs[2].name); + update->AddField("requirement_3_value", reqs[2].min_value); + } + // equip/unequip events //update->AddField("equip_script", we haven't saved the script XML); //update->AddField("consume_script", consumeScriptName); @@ -1477,7 +1493,7 @@ return true; } -ItemRequirement *psItemStats::GetRequirements() +csArray<ItemRequirement> &psItemStats::GetRequirements() { return reqs; } @@ -1487,7 +1503,7 @@ CS_ASSERT(!statName.IsEmpty()); // If it's already required, use the higher of the two requirements. - for (int i = 0; i < 3; i++) + for (size_t i = 0; i < reqs.GetSize(); i++) { if (statName.CompareNoCase(reqs[i].name)) { @@ -1496,19 +1512,17 @@ } } + // No space available (we're limited to three requirements by the DB) + if(reqs.GetSize() >= 3) + return true; + // Otherwise try and add it. - for (int i = 0; i < 3; i++) - { - if (reqs[i].name.IsEmpty()) - { - reqs[i].name = statName; - reqs[i].min_value = statValue; - return true; - } - } + ItemRequirement req; + req.name = statName; + req.min_value = statValue; + reqs.Push(req); - // No space available (we're limited to three requirements by the DB) - return false; + return true; } psItem *psItemStats::InstantiateBasicItem(bool transient) Modified: trunk/src/server/bulkobjects/psitemstats.h =================================================================== --- trunk/src/server/bulkobjects/psitemstats.h 2011-02-26 11:52:13 UTC (rev 6993) +++ trunk/src/server/bulkobjects/psitemstats.h 2011-02-26 12:37:54 UTC (rev 6994) @@ -454,7 +454,7 @@ csString stat_type; - ItemRequirement reqs[3]; + csArray<ItemRequirement> reqs; int spell_id_on_hit; float spell_on_hit_probability; int spell_id_feature; @@ -698,7 +698,7 @@ /** Gets the list of requirements of this item, used by psitem to check them over a player * @return A pointer to the start of the array of itemRequirement (they are 3 elements) */ - ItemRequirement *GetRequirements(); + csArray<ItemRequirement> &GetRequirements(); bool SetRequirement(const csString & statName, float statValue); /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2011-03-05 19:18:50
|
Revision: 7047 http://planeshift.svn.sourceforge.net/planeshift/?rev=7047&view=rev Author: weltall2 Date: 2011-03-05 19:18:44 +0000 (Sat, 05 Mar 2011) Log Message: ----------- fixed PS#5050 - Buffs count towards quest skill requirements, allowed to use the buffed version too if requested but it's not default anymore Modified Paths: -------------- trunk/src/server/bulkobjects/psquest.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psquestprereqops.h Modified: trunk/src/server/bulkobjects/psquest.cpp =================================================================== --- trunk/src/server/bulkobjects/psquest.cpp 2011-03-05 15:05:29 UTC (rev 7046) +++ trunk/src/server/bulkobjects/psquest.cpp 2011-03-05 19:18:44 UTC (rev 7047) @@ -467,6 +467,17 @@ prerequisite.AttachNew(new psQuestPrereqOpTimeOfDay(min,max)); } + else if ( strcmp( topNode->GetValue(), "variable" ) == 0 ) + { + csString name = topNode->GetAttributeValue("name"); + if (name.IsEmpty()) + { + Error1("No name given for character variable prerequisite operation"); + return false; + } + + prerequisite.AttachNew(new psQuestPrereqOpVariable(name)); + } else if ( strcmp( topNode->GetValue(), "onlinetime" ) == 0 ) { int min = topNode->GetAttributeValueAsInt("min"); @@ -519,7 +530,10 @@ unsigned int max = topNode->GetAttributeValueAsInt("max"); - prerequisite.AttachNew(new psQuestPrereqOpSkill(skill,min,max)); + //we don't allow buffed stats to be taken in consideration by default + bool allowBuffed = topNode->GetAttributeValueAsBool("allowbuffed", false); + + prerequisite.AttachNew(new psQuestPrereqOpSkill(skill,min,max, allowBuffed)); } else { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2011-03-05 15:05:29 UTC (rev 7046) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2011-03-05 19:18:44 UTC (rev 7047) @@ -758,8 +758,15 @@ bool psQuestPrereqOpSkill::Check(psCharacter * character) { - int skill_val = character->GetSkillRank(skill->id).Current(); + int skill_val; + //if we allow buffed stats to be taken in consideration we take the + //current skill else we take the base skill (without buff/debuff) + if(allowBuffed) + skill_val = character->GetSkillRank(skill->id).Current(); + else + skill_val = character->GetSkillRank(skill->id).Base(); + if(max && skill_val > max) { return false; @@ -784,7 +791,8 @@ { script.AppendFmt(" max=\"%d\"", max); } - script.Append(" />"); + + script.AppendFmt(" allowbuffed=\"%s\" />", allowBuffed ? "true" : "false"); return script; } @@ -792,6 +800,6 @@ csPtr<psQuestPrereqOp> psQuestPrereqOpSkill::Copy() { csRef<psQuestPrereqOpSkill> copy; - copy.AttachNew(new psQuestPrereqOpSkill(skill,min,max)); + copy.AttachNew(new psQuestPrereqOpSkill(skill, min, max, allowBuffed)); return csPtr<psQuestPrereqOp>(copy); } Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2011-03-05 15:05:29 UTC (rev 7046) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2011-03-05 19:18:44 UTC (rev 7047) @@ -1284,21 +1284,23 @@ */ psSkillInfo *skill; - /** - * The skill level range - */ - int min; - int max; + int min; ///< The minimum skill level + int max; ///< The maximum skill level + bool allowBuffed; ///< Stores if we should allow buff to be taken in consideration public: /** - * Construct a faction operator + * Construct a skill operator * - * @param faction The quest that need to be assigned. + * @param skill The skill which should be checked for. + * @param min The minimum acceptable for this prerequisite to be true. + * @param max The maximum acceptable for this prerequisite to be true. + * @param allowBuffed Declares if buff should be taken in consideration */ - psQuestPrereqOpSkill(psSkillInfo *skill, unsigned int min, unsigned int max):skill(skill),min(min),max(max){}; + psQuestPrereqOpSkill(psSkillInfo *skill, unsigned int min, unsigned int max, bool allowBuffed):skill(skill),min(min),max(max),allowBuffed(allowBuffed){}; /** + * Destructor */ virtual ~psQuestPrereqOpSkill() {} @@ -1314,7 +1316,7 @@ * Convert the prerequisite operator to a xml string * * Convert the operator into the xml string: - * <skill name="skill name" min="0" max="0"/> + * <skill name="skill name" min="0" max="0" allowbuffed="false" /> * * @return XML string for the prerequisite operator. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wo...@us...> - 2011-11-01 21:42:01
|
Revision: 7704 http://planeshift.svn.sourceforge.net/planeshift/?rev=7704&view=rev Author: woden_ Date: 2011-11-01 21:41:55 +0000 (Tue, 01 Nov 2011) Log Message: ----------- Bugfix for PS#5413 Rework on the Skill::Practice function and refactor it to be two functions Skill::CheckDoRank Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2011-11-01 17:36:22 UTC (rev 7703) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2011-11-01 21:41:55 UTC (rev 7704) @@ -2749,6 +2749,8 @@ void psCharacter::Train( PSSKILL skill, int yIncrease ) { skills.Train( skill, yIncrease ); // Normal training + + skills.CheckDoRank( skill ); if(!psServer::CharacterLoader.UpdateCharacterSkill( pid, skill, @@ -2834,22 +2836,32 @@ } -bool Skill::Practice( unsigned int amount, unsigned int& actuallyAdded,psCharacter* user ) +bool Skill::CheckDoRank( psCharacter* user ) { + if ( y >= yCost && z >= zCost) + { + rank.SetBase(rank.Base()+1); + z = 0; + y = 0; + // Reset the costs for Y/Z + CalculateCosts(user); + return true; + } + return false; +} + +bool Skill::Practice( unsigned int amount, unsigned int& actuallyAdded, psCharacter* user ) +{ bool rankup = false; + // Practice can take place if ( y >= yCost ) { - z+=amount; - if ( z >= zCost ) + z+=amount; + rankup = CheckDoRank( user ); + if ( rankup ) { - rank.SetBase(rank.Base()+1); - z = 0; - y = 0; - actuallyAdded = z - zCost; - rankup = true; - // Reset the costs for Y/Z - CalculateCosts(user); + actuallyAdded = -zCost; } else { @@ -2860,7 +2872,6 @@ { actuallyAdded = 0; } - dirtyFlag = true; return rankup; } @@ -3348,6 +3359,17 @@ } } +void SkillSet::CheckDoRank( PSSKILL skill ) +{ + + if (skill<0 ||skill>=(PSSKILL)psserver->GetCacheManager()->GetSkillAmount()) + return; + else + { + skills[skill].CheckDoRank( self ); + } +} + void SkillSet::Train( PSSKILL skill, int yIncrease ) { Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2011-11-01 17:36:22 UTC (rev 7703) +++ trunk/src/server/bulkobjects/pscharacter.h 2011-11-01 21:41:55 UTC (rev 7704) @@ -332,6 +332,19 @@ */ void Train( int yIncrease ); + /** @brief Check if skill will rank and rank it up. + * + * This checks a couple of things. + * 1) If the player has the required knowledge to allow for training. + * 2) If the amount of practice causes a rank change it will increase + * the rank of the skill and reset the knowledge/practice levels. + * + * @param user The character this was for. + * + * @return True if the practice causes a rank change, false if not. + */ + bool CheckDoRank( psCharacter* user ); + /** @brief Practice this skill. * * This checks a couple of things. @@ -418,6 +431,15 @@ */ bool CanTrain( PSSKILL skill ); + /** @brief Checks if a skill should rank and ranks it. + * + * It checks if practice and knowledge is reached to rank the skill. + * + * @param skill The skill we want to check. + */ + void CheckDoRank( PSSKILL skill ); + + /** @brief Trains a skill. * * It will only train up to the cost of the next rank. So the yIncrease is This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2012-02-26 11:06:19
|
Revision: 8095 http://planeshift.svn.sourceforge.net/planeshift/?rev=8095&view=rev Author: weltall2 Date: 2012-02-26 11:06:13 +0000 (Sun, 26 Feb 2012) Log Message: ----------- fixed PS#5525 - Veja's equipment does not allow "take and stack all" Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2012-02-26 09:53:18 UTC (rev 8094) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2012-02-26 11:06:13 UTC (rev 8095) @@ -604,7 +604,10 @@ csArray<size_t> compatibleItems; for (size_t i=1; i<inventory.GetSize(); i++) { - if(inventory[i].item->CheckStackableWith(item, precise, checkStackCount)) + //world stacking compatibility is not checked as it doesn't make sense + //to check if an item can be stacked with another in the world when it's being + //stacked in the inventory of a character. (so the ending false in the method) + if(inventory[i].item->CheckStackableWith(item, precise, checkStackCount, false)) { compatibleItems.Push(i); } Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2012-02-26 09:53:18 UTC (rev 8094) +++ trunk/src/server/bulkobjects/psitem.cpp 2012-02-26 11:06:13 UTC (rev 8095) @@ -1398,7 +1398,7 @@ } } -bool psItem::CheckStackableWith(const psItem *otheritem, bool precise, bool checkStackCount) const +bool psItem::CheckStackableWith(const psItem *otheritem, bool precise, bool checkStackCount, bool checkWorld) const { int i; @@ -1424,6 +1424,7 @@ int purifyStatus = GetPurifyStatus(); if (purifyStatus == 1) // purifying glyphs cannot be stacked return false; + int otherPurifyStatus = otheritem->GetPurifyStatus(); if (purifyStatus != otherPurifyStatus) // glyphs with different purification status cannot be stacked return false; @@ -1457,7 +1458,7 @@ } // Check same instance of world - if (location.worldInstance != otheritem->location.worldInstance) + if(checkWorld && location.worldInstance != otheritem->location.worldInstance) return false; // Check for keys @@ -1485,7 +1486,7 @@ } // This checks to make sure that if the quality is different that these - // items can still be stacked and use an average qualiy system. + // items can still be stacked and use an average quality system. if (item_quality != otheritem->item_quality || GetMaxItemQuality() != otheritem->GetMaxItemQuality()) { if ( GetCurrentStats()->GetFlags() & PSITEMSTATS_FLAG_AVERAGEQUALITY ) Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2012-02-26 09:53:18 UTC (rev 8094) +++ trunk/src/server/bulkobjects/psitem.h 2012-02-26 11:06:13 UTC (rev 8095) @@ -879,7 +879,10 @@ void RunEquipScript(gemActor *actor); void CancelEquipScript(); - bool CheckStackableWith(const psItem *otheritem, bool precise, bool checkStackCount = true) const; + /** + * @param checkWorld Checks if stackability is possible in the world (eg: instances comparing) + */ + bool CheckStackableWith(const psItem *otheritem, bool precise, bool checkStackCount = true, bool checkWorld = true) const; const char *GetSound(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2012-05-04 08:41:40
|
Revision: 8264 http://planeshift.svn.sourceforge.net/planeshift/?rev=8264&view=rev Author: weltall2 Date: 2012-05-04 08:41:29 +0000 (Fri, 04 May 2012) Log Message: ----------- fixed deletion from mathscript Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2012-05-04 08:41:01 UTC (rev 8263) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2012-05-04 08:41:29 UTC (rev 8264) @@ -929,6 +929,20 @@ return NULL; } +psItem *psCharacterInventory::RemoveInventoryItem(INVENTORY_SLOT_NUMBER slot, int count) +{ + if (slot<0 || slot>=PSCHARACTER_SLOT_BULK_END) + return NULL; + + // Inventory indexes start at 1. 0 is reserved for the "NULL" item. + for (size_t i=1; i < inventory.GetSize(); i++) + { + if (inventory[i].item && inventory[i].item->GetLocInParent(true) == slot) + return RemoveItemIndex(i, count, false); + } + return NULL; +} + void psCharacterInventory::RestoreAllInventoryQuality() { // Inventory indexes start at 1. 0 is reserved for the "NULL" item. Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2012-05-04 08:41:01 UTC (rev 8263) +++ trunk/src/server/bulkobjects/pscharinventory.h 2012-05-04 08:41:29 UTC (rev 8264) @@ -282,6 +282,15 @@ */ psItem *RemoveItemID(uint32 itemID,int count = -1, bool storage = false); + /** + * Removes an item that is in the equipment inventory. + * @param bulkSlot The slot we want to remove the item from. + * @param count The number we want to take. -1 Means the entire stack. + * @return pointer to the item that was removed. + */ + psItem *RemoveInventoryItem(INVENTORY_SLOT_NUMBER slot, int count = -1); + + /** Find the total stack count in inventory for a particular type of item. * @param item The base stats of the item we want to count. * @return the count of the total items matching the stats description. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2012-06-13 13:43:07
|
Revision: 8360 http://planeshift.svn.sourceforge.net/planeshift/?rev=8360&view=rev Author: lpancallo Date: 2012-06-13 13:42:56 +0000 (Wed, 13 Jun 2012) Log Message: ----------- added better display of rarity Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/bulkobjects/psitem.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2012-06-12 21:00:06 UTC (rev 8359) +++ trunk/src/server/bulkobjects/psitem.cpp 2012-06-13 13:42:56 UTC (rev 8360) @@ -3069,9 +3069,10 @@ } // Item is random looted - if(true) // TODO what's the right check here? + float rarity = GetRarity(); + if(rarity!=0 && rarity<100) { - itemInfo += csString().Format("\nRarity: %f", GetRarity()); + itemInfo += csString().Format("\nRarity: %s", GetRarityName().GetData()); } psViewItemDescription outgoing(client->GetClientNum(), itemName.GetData(), itemInfo.GetData(), GetImageName(), stack_count); @@ -3436,13 +3437,49 @@ return rarity; } +csString psItem::GetRarityName() +{ + float pctRarity = GetRarity(); + csString name = ""; + + // we assume max rarity is 0.0002% + if(pctRarity<=0.001) + name = "almost unique"; + else if(pctRarity<=0.01) + name = "extremely rare"; + else if(pctRarity<=0.1) + name = "very rare"; + else if(pctRarity<=1) + name = "rare"; + else if(pctRarity<=10) + name = "uncommon"; + else if(pctRarity<100) + name = "common"; + + // cut off non significant digits if less than 0.01 + // example: 0.000765 to 0.0007 and 0.023 to 0.02 + float cutoff = pctRarity; + int i=0; + for(; i<6; i++) + { + cutoff*=10; + if(cutoff>=1) + break; + } + + csString format = "%s (%"; + format.AppendFmt(".%d",i+1); + format.Append("f%%)"); + return (new csString)->Format(format.GetData(),name.GetData(),pctRarity); +} + float psItem::CalculateItemRarity() { // TODO the following code should be moved to a script if possible. - // default rarity - float calcRarity = 1; + // default rarity: not rare + float calcRarity = 100; // calculate number of modifiers int numModifiers=0; @@ -3454,7 +3491,7 @@ // if there are no modifiers the item is not rare, leave rarity at 1 if(numModifiers==0) - return 1; + return calcRarity; // get prefix probability (index 0) float prefixProbability = psserver->GetSpawnManager()->GetLootRandomizer()->GetModifierPercentProbability(modifierIds[0],0); @@ -3486,6 +3523,10 @@ { calcRarity *= 0.01; } + + // return percentage + calcRarity *= 100; + return calcRarity; } Modified: trunk/src/server/bulkobjects/psitem.h =================================================================== --- trunk/src/server/bulkobjects/psitem.h 2012-06-12 21:00:06 UTC (rev 8359) +++ trunk/src/server/bulkobjects/psitem.h 2012-06-13 13:42:56 UTC (rev 8360) @@ -1200,8 +1200,12 @@ void PrepareCreativeItemInstance(); + /// return Rarity as 0-100% range float GetRarity(); + /// return Rarity description. example: "rare (0.7%)" + csString GetRarityName(); + private: /// Static reference to the pool for all psItem objects static PoolAllocator<psItem> itempool; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2012-06-18 17:57:52
|
Revision: 8363 http://planeshift.svn.sourceforge.net/planeshift/?rev=8363&view=rev Author: weltall2 Date: 2012-06-18 17:57:46 +0000 (Mon, 18 Jun 2012) Log Message: ----------- added :Race and :RaceUID properties to actors. they rappresent the race id from the db and the raceinfo uid from the db Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psraceinfo.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2012-06-16 18:09:11 UTC (rev 8362) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2012-06-18 17:57:46 UTC (rev 8363) @@ -2711,6 +2711,18 @@ { return (double)IsPet(); } + else if (property == "Race") + { + if(!GetRaceInfo()) + return 0; + return (double)GetRaceInfo()->GetRaceID(); + } + else if (property == "RaceUID") + { + if(!GetRaceInfo()) + return 0; + return (double)GetRaceInfo()->GetUID(); + } Error2("Requested psCharacter property not found '%s'", ptr); return 0; Modified: trunk/src/server/bulkobjects/psraceinfo.h =================================================================== --- trunk/src/server/bulkobjects/psraceinfo.h 2012-06-16 18:09:11 UTC (rev 8362) +++ trunk/src/server/bulkobjects/psraceinfo.h 2012-06-18 17:57:46 UTC (rev 8363) @@ -152,6 +152,17 @@ */ float GetScale() { return scale; } + /** Gets the id of the race (regardless of sex). + * @return An int rappresenting the whole race. + */ + int GetRaceID() { return race; } + + /** Gets the id of the specific race (considering also its sex, and alternative versions), + * @return An int rappresenting the specific instance of the race (as a specific sex). + */ + int GetUID() { return uid; } + + }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2013-03-03 14:56:47
|
Revision: 8628 http://planeshift.svn.sourceforge.net/planeshift/?rev=8628&view=rev Author: weltall2 Date: 2013-03-03 14:56:39 +0000 (Sun, 03 Mar 2013) Log Message: ----------- handle multi trigger ka as separate triggers connected to the same response (similarly to quest) instead of creating synonims. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2013-03-02 14:58:49 UTC (rev 8627) +++ trunk/src/server/bulkobjects/dictionary.cpp 2013-03-03 14:56:39 UTC (rev 8628) @@ -358,23 +358,39 @@ continue; } - ParseMultiTrigger(newtrig); + csArray<NpcTrigger*> newTriggers = ParseMultiTrigger(newtrig); - if(newtrig->trigger.Length() == 0) + // As the trigger has been parsed we can delete the new trigger + delete newtrig; + + for(unsigned int y = 0; y < newTriggers.GetSize(); y++) { - Error3("Found bad trigger %d of trigger length 0 in triggers, area %s", newtrig->id, newtrig->area.GetDataSafe()); - delete newtrig; - continue; - } + newtrig = newTriggers[y]; - AddWords(newtrig->trigger); // Make sure these trigger words are in known word list. + if(newtrig->trigger.Length() == 0) + { + Error3("Found bad trigger %d of trigger length 0 in triggers, area %s", newtrig->id, newtrig->area.GetDataSafe()); + delete newtrig; + continue; + } - triggers.Insert(newtrig); + AddWords(newtrig->trigger); // Make sure these trigger words are in known word list. - if (!FindKnowledgeArea(newtrig->area)) - { - Debug2(LOG_QUESTS, 0, "--------Adding KA: %s",newtrig->area.GetDataSafe()); - knowledgeAreas.PutUnique(newtrig->area,newtrig->area); + if (!FindKnowledgeArea(newtrig->area)) + { + Debug2(LOG_QUESTS, 0, "--------Adding KA: %s",newtrig->area.GetDataSafe()); + knowledgeAreas.PutUnique(newtrig->area,newtrig->area); + } + + // check if there is an equal triggers, in that case just trash this new one. + if(triggers.Find(newtrig, NULL)) + { + delete newtrig; + } + else + { + triggers.Insert(newtrig); + } } } return true; @@ -504,29 +520,27 @@ return false; } -void NPCDialogDict::ParseMultiTrigger(NpcTrigger *parsetrig) +csArray<NpcTrigger*> NPCDialogDict::ParseMultiTrigger(NpcTrigger *parsetrig) { + csArray<NpcTrigger*> newTriggers; psString trig(parsetrig->trigger); csStringArray list; trig.Split(list,'.'); - if (list.GetSize() <= 1) - return; - parsetrig->trigger = list.Get(0); - int id = AddTriggerGroupEntry(-1,list.Get(0),0); - if (id < 0) + // For each trigger create a trigger object rappresenting it. + for(int i = 0; i < list.GetSize(); i++) { - Error3("Error in MultiTrigger %d (%s)",parsetrig->id, parsetrig->trigger.GetDataSafe() ); - return; + NpcTrigger* newtrig = new NpcTrigger; + newtrig->id = parsetrig->id; + newtrig->area = parsetrig->area; + newtrig->priorresponseID = parsetrig->priorresponseID; + newtrig->trigger = list[i]; + newTriggers.Push(newtrig); } - for (size_t i=1; i<list.GetSize(); i++) - { - AddTriggerGroupEntry(-1,list.Get(i),id); - } + return newTriggers; } - bool NPCDialogDict::AddTrigger( iDataConnection* db, int triggerID , int responseID ) { Result result(db->Select("SELECT * from npc_triggers WHERE id=%d", triggerID )); @@ -545,28 +559,38 @@ return false; } - ParseMultiTrigger(newtrig); + csArray<NpcTrigger*> newTriggers = ParseMultiTrigger(newtrig); + // As the trigger has been parsed we can delete the new trigger + delete newtrig; + CS_ASSERT(responseID != -1); - newtrig->responseIDlist.Push(responseID); - NpcTrigger* trig; + for(int i = 0; i < newTriggers.GetSize(); i++) + { + newtrig = newTriggers[i]; + newtrig->responseIDlist.Push(responseID); - AddWords( newtrig->trigger ); + NpcTrigger* trig; - trig = triggers.Find( newtrig, NULL); - if (trig) - { - // There are already a trigger with this combination of - // triggertext, KA, and prior respose so pushing the trigger - // response on the same trigger. - CS_ASSERT(responseID != -1); - trig->responseIDlist.Push(responseID); + AddWords( newtrig->trigger ); - delete newtrig; + trig = triggers.Find(newtrig, NULL); + if (trig) + { + // There are already a trigger with this combination of + // triggertext, KA, and prior respose so pushing the trigger + // response on the same trigger. + CS_ASSERT(responseID != -1); + trig->responseIDlist.Push(responseID); + + delete newtrig; + } + else + { + triggers.Insert(newtrig); + } } - else - triggers.Insert(newtrig); return true; } Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2013-03-02 14:58:49 UTC (rev 8627) +++ trunk/src/server/bulkobjects/dictionary.h 2013-03-03 14:56:39 UTC (rev 8628) @@ -106,7 +106,7 @@ NpcTerm* AddTerm(const char *term); int AddTriggerGroupEntry(int id,const char *txt, int equivID); - void ParseMultiTrigger(NpcTrigger *parsetrig); + csArray<NpcTrigger*> ParseMultiTrigger(NpcTrigger *parsetrig); public: NPCDialogDict(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2013-05-03 21:44:46
|
Revision: 8703 http://sourceforge.net/p/planeshift/code/8703 Author: lpancallo Date: 2013-05-03 21:44:39 +0000 (Fri, 03 May 2013) Log Message: ----------- Reverted gmtime_r change, as windows uses gmtime_s and so it doesn't compile. Autoformatting. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharacter.h Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2013-05-02 18:16:21 UTC (rev 8702) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2013-05-03 21:44:39 UTC (rev 8703) @@ -79,7 +79,7 @@ #define ENABLE_MAX_CAPACITY 0 -const char *psCharacter::characterTypeName[] = { "player", "npc", "pet", "mount", "mountpet" }; +const char* psCharacter::characterTypeName[] = { "player", "npc", "pet", "mount", "mountpet" }; csWeakRef<MathScript> psCharacter::maxRealmScript = NULL; csWeakRef<MathScript> psCharacter::staminaCalc = NULL; @@ -101,16 +101,16 @@ PoolAllocator<psCharacter> psCharacter::characterpool; -void *psCharacter::operator new(size_t allocSize) +void* psCharacter::operator new(size_t allocSize) { // Debug3(LOG_CHARACTER,"%i %i", allocSize,sizeof(psCharacter)); // CS_ASSERT(allocSize<=sizeof(psCharacter)); - return (void *)characterpool.CallFromNew(); + return (void*)characterpool.CallFromNew(); } -void psCharacter::operator delete(void *releasePtr) +void psCharacter::operator delete(void* releasePtr) { - characterpool.CallFromDelete((psCharacter *)releasePtr); + characterpool.CallFromDelete((psCharacter*)releasePtr); } psCharacter::psCharacter() : inventory(this), @@ -133,7 +133,7 @@ overrideMaxMana = 0.0f; name = lastname = fullName = " "; - SetSpouseName( "" ); + SetSpouseName(""); isMarried = false; race.SetCharacter(this); @@ -148,7 +148,7 @@ location.loc_yrot = 0.0f; spawnLoc = location; - for (int i=0;i<PSTRAIT_LOCATION_COUNT;i++) + for(int i=0; i<PSTRAIT_LOCATION_COUNT; i++) traits[i] = NULL; npcSpawnRuleId = -1; @@ -162,7 +162,7 @@ trainerInfo = NULL; trainer = NULL; actor = NULL; - + timeconnected = 0; startTimeThisSession = csGetTicks(); @@ -293,10 +293,10 @@ psCharacter::~psCharacter() { - if (guildinfo) + if(guildinfo) guildinfo->Disconnect(this); - if (factions) + if(factions) { delete factions; factions = NULL; @@ -305,24 +305,24 @@ // First force and update of the DB of all QuestAssignments before deleting // every assignment. questManager.UpdateQuestAssignments(true); - + delete vitals; vitals = NULL; // delete workInfo; } -void psCharacter::SetActor( gemActor* newActor ) +void psCharacter::SetActor(gemActor* newActor) { actor = newActor; - if (actor) + if(actor) { inventory.RunEquipScripts(); inventory.CalculateLimits(); } } -bool psCharacter::Load(iResultRow& row) +bool psCharacter::Load(iResultRow &row) { // TODO: Link in account ID? @@ -333,14 +333,14 @@ questManager.Initialize(this); accountid = AccountID(row.GetInt("account_id")); - SetCharType( row.GetUInt32("character_type") ); + SetCharType(row.GetUInt32("character_type")); SetFullName(row["name"], row["lastname"]); - SetOldLastName( row["old_lastname"] ); + SetOldLastName(row["old_lastname"]); unsigned int raceid = row.GetUInt32("racegender_id"); - psRaceInfo *raceinfo = psserver->GetCacheManager()->GetRaceInfoByID(raceid); - if (!raceinfo) + psRaceInfo* raceinfo = psserver->GetCacheManager()->GetRaceInfoByID(raceid); + if(!raceinfo) { Error3("Character ID %s has unknown race id %s. Character loading failed.",row["id"],row["racegender_id"]); return false; @@ -361,7 +361,7 @@ SetOOCDescription(row["description_ooc"]); //loads the ooc description of the player SetCreationInfo(row["creation_info"]); //loads the info gathered in the creation in order to allow the player - //to review them + //to review them SetLifeDescription(row["description_life"]); //Loads the life events added by players @@ -422,11 +422,11 @@ { GetMaxMana().SetBase(row.GetFloat("base_mana_max")); } - + overrideMaxHp = GetMaxHP().Base(); overrideMaxMana = GetMaxMana().Base(); - if (!LoadSkills(use_id)) + if(!LoadSkills(use_id)) { Error2("Cannot load skills for Character %s. Character loading failed.", ShowID(pid)); return false; @@ -453,10 +453,10 @@ mod = row.GetFloat("stamina_mental"); SetStamina(mod < 0 ? GetMaxMStamina().Base() : mod,false); - if( GetHP() <= 0 ) - SetHitPoints( GetMaxHP().Base() ); - if( GetMana() <= 0 ) - SetMana( GetMaxMana().Base() ); + if(GetHP() <= 0) + SetHitPoints(GetMaxHP().Base()); + if(GetMana() <= 0) + SetMana(GetMaxMana().Base()); vitals->SetOrigVitals(); // This saves them as loaded state for restoring later without hitting db, npc death resurrect. @@ -477,8 +477,8 @@ row.GetInt("bank_money_hexas"), row.GetInt("bank_money_trias")); - psSectorInfo *sectorinfo=psserver->GetCacheManager()->GetSectorInfoByID(row.GetUInt32("loc_sector_id")); - if (sectorinfo==NULL) + psSectorInfo* sectorinfo=psserver->GetCacheManager()->GetSectorInfoByID(row.GetUInt32("loc_sector_id")); + if(sectorinfo==NULL) { Error3("Character %s has unresolvable sector id %lu.", ShowID(pid), row.GetUInt32("loc_sector_id")); return false; @@ -489,7 +489,7 @@ row.GetFloat("loc_x"), row.GetFloat("loc_y"), row.GetFloat("loc_z"), - row.GetFloat("loc_yrot") ); + row.GetFloat("loc_yrot")); if(csGetTicks() - start > 500) { csString status; @@ -501,7 +501,7 @@ // Guild fields here guildinfo = psserver->GetCacheManager()->FindGuild(row.GetUInt32("guild_member_of")); - if (guildinfo) + if(guildinfo) guildinfo->Connect(this); SetNotifications(row.GetInt("join_notifications")); @@ -519,7 +519,7 @@ timeconnected = row.GetUInt32("time_connected_sec"); startTimeThisSession = csGetTicks(); - if (!LoadTraits(use_id)) + if(!LoadTraits(use_id)) { Error2("Cannot load traits for Character %s. Character loading failed.", ShowID(pid)); return false; @@ -534,15 +534,15 @@ } // This data is loaded only if it's a player, not an NPC - if ( !IsNPC() && !IsPet() ) + if(!IsNPC() && !IsPet()) { - if (!questManager.LoadQuestAssignments()) + if(!questManager.LoadQuestAssignments()) { Error2("Cannot load quest assignments for Character %s. Character loading failed.", ShowID(pid)); return false; } - if (!LoadGMEvents()) + if(!LoadGMEvents()) { Error2("Cannot load GM Events for Character %s. Character loading failed.", ShowID(pid)); return false; @@ -557,11 +557,11 @@ csGetTicks() - start, ShowID(pid), __FILE__, __LINE__); psserver->GetLogCSV()->Write(CSV_STATUS, status); } - if (use_id != pid) + if(use_id != pid) { // This has a master npc template, so load character specific items // from the master npc. - if (!inventory.Load(use_id)) + if(!inventory.Load(use_id)) { Error2("Cannot load character specific items for Character %s. Character loading failed.", ShowID(pid)); return false; @@ -579,7 +579,7 @@ csGetTicks() - start, ShowID(pid), __FILE__, __LINE__); psserver->GetLogCSV()->Write(CSV_STATUS, status); } - if (!LoadRelationshipInfo(pid)) // Buddies, Marriage Info, Familiars + if(!LoadRelationshipInfo(pid)) // Buddies, Marriage Info, Familiars { return false; } @@ -605,7 +605,7 @@ } // Load merchant info csRef<psMerchantInfo> merchant = csPtr<psMerchantInfo>(new psMerchantInfo()); - if (merchant->Load(use_id)) + if(merchant->Load(use_id)) { merchantInfo = merchant; } @@ -619,7 +619,7 @@ } // Load trainer info csRef<psTrainerInfo> trainer = csPtr<psTrainerInfo>(new psTrainerInfo()); - if (trainer->Load(use_id)) + if(trainer->Load(use_id)) { trainerInfo = trainer; } @@ -631,7 +631,7 @@ csGetTicks() - start, ShowID(pid), __FILE__, __LINE__); psserver->GetLogCSV()->Write(CSV_STATUS, status); } - if (!LoadSpells(use_id)) + if(!LoadSpells(use_id)) { Error2("Cannot load spells for Character %s. Character loading failed.", ShowID(pid)); return false; @@ -656,7 +656,7 @@ if(row.GetInt("banker") == 1) banker = true; - // Load if the character is a statue + // Load if the character is a statue if(row.GetInt("statue") == 1) isStatue = true; @@ -664,24 +664,24 @@ return true; } -bool psCharacter::QuickLoad(iResultRow& row, bool noInventory) +bool psCharacter::QuickLoad(iResultRow &row, bool noInventory) { pid = row.GetInt("id"); SetFullName(row["name"], row["lastname"]); unsigned int raceid = row.GetUInt32("racegender_id"); - psRaceInfo *raceinfo = psserver->GetCacheManager()->GetRaceInfoByID(raceid); - if (!raceinfo) + psRaceInfo* raceinfo = psserver->GetCacheManager()->GetRaceInfoByID(raceid); + if(!raceinfo) { Error3("Character ID %s has unknown race id %s.",row["id"],row["racegender_id"]); return false; } - if (!noInventory) + if(!noInventory) { SetRaceInfo(raceinfo); - if (!LoadTraits(pid)) + if(!LoadTraits(pid)) { Error2("Cannot load traits for Character %s.", ShowID(pid)); return false; @@ -700,25 +700,25 @@ Result has_a(db->Select("SELECT a.*, b.name AS \"buddy_name\" FROM character_relationships a, characters b WHERE a.character_id = %u AND a.related_id = b.id order by a.character_id", pid.Unbox())); Result of_a(db->Select("SELECT a.*, b.name AS \"buddy_name\" FROM character_relationships a, characters b WHERE a.related_id = %u AND a.character_id = b.id order by a.related_id", pid.Unbox())); - if ( !LoadFamiliar( has_a, of_a ) ) + if(!LoadFamiliar(has_a, of_a)) { Error2("Cannot load familiar info for Character %s.", ShowID(pid)); return false; } - if ( !LoadMarriageInfo( has_a ) ) + if(!LoadMarriageInfo(has_a)) { - Error2("Cannot load Marriage Info for Character %s.", ShowID(pid)); - return false; + Error2("Cannot load Marriage Info for Character %s.", ShowID(pid)); + return false; } - if ( !buddyManager.LoadBuddies( has_a, of_a ) ) + if(!buddyManager.LoadBuddies(has_a, of_a)) { Error2("Cannot load buddies for Character %s.", ShowID(pid)); return false; } - if ( !LoadExploration( has_a ) ) + if(!LoadExploration(has_a)) { Error2("Cannot load exploration points for Character %s.", ShowID(pid)); return false; @@ -755,10 +755,10 @@ bool psCharacter::LoadFactions(PID pid) { Result factions(db->Select("SELECT faction_id, value from character_factions where character_id = %u", pid.Unbox())); - - if (factions.IsValid()) + + if(factions.IsValid()) { - for (unsigned long i = 0; i < factions.Count(); i++) + for(unsigned long i = 0; i < factions.Count(); i++) { //sets the faction, overwrites what could be there and doesn't set the dirty flag GetFactions()->UpdateFactionStanding(factions[i].GetUInt32("faction_id"), factions[i].GetUInt32("value"), false, true); @@ -777,7 +777,7 @@ csHash<charVariable, csString>::GlobalIterator iter(charVariables.GetIterator()); while(iter.HasNext()) { - charVariable& variable = iter.Next(); + charVariable &variable = iter.Next(); if(variable.dirty) { db->CommandPump("INSERT INTO character_variables " @@ -795,10 +795,10 @@ bool psCharacter::LoadVariables(PID pid) { Result variables(db->Select("SELECT name, value from character_variables where character_id = %u", pid.Unbox())); - - if (variables.IsValid()) + + if(variables.IsValid()) { - for (unsigned long i = 0; i < variables.Count(); i++) + for(unsigned long i = 0; i < variables.Count(); i++) { charVariables.PutUnique(variables[i]["name"], charVariable(variables[i]["name"], variables[i]["value"])); } @@ -810,9 +810,9 @@ void psCharacter::LoadIntroductions() { Result r = db->Select("SELECT * FROM introductions WHERE charid=%d", pid.Unbox()); - if (r.IsValid()) + if(r.IsValid()) { - for (unsigned long i = 0; i < r.Count(); i++) + for(unsigned long i = 0; i < r.Count(); i++) { unsigned int charID = r[i].GetUInt32("introcharid"); // Safe to skip test because the DB disallows duplicate rows @@ -823,26 +823,26 @@ -bool psCharacter::LoadMarriageInfo( Result& result) +bool psCharacter::LoadMarriageInfo(Result &result) { - if ( !result.IsValid() ) + if(!result.IsValid()) { Error3("Could not load marriage info for %s: %s", ShowID(pid), db->GetLastError()); return false; } - for ( unsigned int x = 0; x < result.Count(); x++ ) + for(unsigned int x = 0; x < result.Count(); x++) { - if ( strcmp( result[x][ "relationship_type" ], "spouse" ) == 0 ) + if(strcmp(result[x][ "relationship_type" ], "spouse") == 0) { const char* spouseName = result[x]["spousename"]; - if ( spouseName == NULL ) + if(spouseName == NULL) return true; - SetSpouseName( spouseName ); + SetSpouseName(spouseName); - Notify2( LOG_MARRIAGE, "Successfully loaded marriage info for %s", name.GetData() ); + Notify2(LOG_MARRIAGE, "Successfully loaded marriage info for %s", name.GetData()); break; } } @@ -850,40 +850,40 @@ return true; } -bool psCharacter::LoadFamiliar( Result& pet, Result& owner ) +bool psCharacter::LoadFamiliar(Result &pet, Result &owner) { ownerId = 0; - if ( !pet.IsValid() ) + if(!pet.IsValid()) { Error3("Could not load pet info for %s: %s", ShowID(pid), db->GetLastError()); return false; } - if ( !owner.IsValid() ) + if(!owner.IsValid()) { Error3("Could not load owner info for character %s: %s", ShowID(pid), db->GetLastError()); return false; } unsigned int x; - for ( x = 0; x < pet.Count(); x++ ) + for(x = 0; x < pet.Count(); x++) { - if ( strcmp( pet[x][ "relationship_type" ], "familiar" ) == 0 ) + if(strcmp(pet[x][ "relationship_type" ], "familiar") == 0) { - familiarsId.Push(pet[x].GetInt( "related_id" )); - Notify2( LOG_PETS, "Successfully loaded familiar for %s", name.GetData() ); + familiarsId.Push(pet[x].GetInt("related_id")); + Notify2(LOG_PETS, "Successfully loaded familiar for %s", name.GetData()); } } - for ( x = 0; x < owner.Count(); x++ ) + for(x = 0; x < owner.Count(); x++) { - if ( strcmp( owner[x][ "relationship_type" ], "familiar" ) == 0 ) + if(strcmp(owner[x][ "relationship_type" ], "familiar") == 0) { - ownerId = owner[x].GetInt( "character_id" ); - Notify2( LOG_PETS, "Successfully loaded owner for %s", name.GetData() ); + ownerId = owner[x].GetInt("character_id"); + Notify2(LOG_PETS, "Successfully loaded owner for %s", name.GetData()); break; } } @@ -891,7 +891,7 @@ return true; } -bool psCharacter::LoadExploration(Result& exploration) +bool psCharacter::LoadExploration(Result &exploration) { if(!exploration.IsValid()) { @@ -915,29 +915,31 @@ { assignedEvents.runningEventID = psserver->GetGMEventManager()->GetAllGMEventsForPlayer(pid, - assignedEvents.completedEventIDs, - assignedEvents.runningEventIDAsGM, - assignedEvents.completedEventIDsAsGM); + assignedEvents.completedEventIDs, + assignedEvents.runningEventIDAsGM, + assignedEvents.completedEventIDsAsGM); return true; // cant see how this can fail, but keep convention for now. } -void psCharacter::SetLastLoginTime(const char *last_login, bool save ) +void psCharacter::SetLastLoginTime(const char* last_login, bool save) { csString timeStr; - if ( !last_login ) + if(!last_login) { time_t curr=time(0); tm result; - tm* gmtm = gmtime_r(&curr,&result); + //TOFIX: gmtime is not thread safe, but windows uses gmtime_s() and linux gmtime_r() + // so we need a wrapper function or similar + tm* gmtm = gmtime(&curr); timeStr.Format("%d-%02d-%02d %02d:%02d:%02d", - gmtm->tm_year+1900, - gmtm->tm_mon+1, - gmtm->tm_mday, - gmtm->tm_hour, - gmtm->tm_min, - gmtm->tm_sec); + gmtm->tm_year+1900, + gmtm->tm_mon+1, + gmtm->tm_mday, + gmtm->tm_hour, + gmtm->tm_min, + gmtm->tm_sec); } else { @@ -949,13 +951,13 @@ if(guildinfo) guildinfo->UpdateLastLogin(this); - if ( save ) + if(save) { //Store in database - if (!db->CommandPump("UPDATE characters SET last_login='%s' WHERE id='%d'", timeStr.GetData(), pid.Unbox())) + if(!db->CommandPump("UPDATE characters SET last_login='%s' WHERE id='%d'", timeStr.GetData(), pid.Unbox())) { - Error2( "Last login storage: DB Error: %s\n", db->GetLastError() ); - return; + Error2("Last login storage: DB Error: %s\n", db->GetLastError()); + return; } } } @@ -969,14 +971,14 @@ { // Load spells in asc since we use push to create the spell list. Result spells(db->Select("SELECT * FROM player_spells WHERE player_id=%u ORDER BY spell_slot ASC", use_id.Unbox())); - if (spells.IsValid()) + if(spells.IsValid()) { int i,count=spells.Count(); - for (i=0;i<count;i++) + for(i=0; i<count; i++) { - psSpell * spell = psserver->GetCacheManager()->GetSpellByID(spells[i].GetInt("spell_id")); - if (spell != NULL) + psSpell* spell = psserver->GetCacheManager()->GetSpellByID(spells[i].GetInt("spell_id")); + if(spell != NULL) AddSpell(spell); else { @@ -994,22 +996,22 @@ // Load skills Result skillResult(db->Select("SELECT * FROM character_skills WHERE character_id=%u", use_id.Unbox())); - for ( size_t z = 0; z < psserver->GetCacheManager()->GetSkillAmount(); z++ ) + for(size_t z = 0; z < psserver->GetCacheManager()->GetSkillAmount(); z++) { - skills.SetSkillInfo( (PSSKILL)z, psserver->GetCacheManager()->GetSkillByID((PSSKILL)z), false ); + skills.SetSkillInfo((PSSKILL)z, psserver->GetCacheManager()->GetSkillByID((PSSKILL)z), false); } - if (skillResult.IsValid()) + if(skillResult.IsValid()) { unsigned int i; - for (i=0;i<skillResult.Count();i++) + for(i=0; i<skillResult.Count(); i++) { - if (skillResult[i]["skill_id"]!=NULL) + if(skillResult[i]["skill_id"]!=NULL) { PSSKILL skill = (PSSKILL)skillResult[i].GetInt("skill_id"); - skills.SetSkillPractice( skill, skillResult[i].GetInt("skill_Z") ); - skills.SetSkillKnowledge( skill, skillResult[i].GetInt("skill_Y") ); - skills.SetSkillRank( skill, skillResult[i].GetInt("skill_Rank"), false ); + skills.SetSkillPractice(skill, skillResult[i].GetInt("skill_Z")); + skills.SetSkillKnowledge(skill, skillResult[i].GetInt("skill_Y")); + skills.SetSkillRank(skill, skillResult[i].GetInt("skill_Rank"), false); } } skills.Calculate(); @@ -1024,13 +1026,13 @@ { // Load traits Result traits(db->Select("SELECT * FROM character_traits WHERE character_id=%u", use_id.Unbox())); - if (traits.IsValid()) + if(traits.IsValid()) { unsigned int i; - for (i=0;i<traits.Count();i++) + for(i=0; i<traits.Count(); i++) { - psTrait *trait=psserver->GetCacheManager()->GetTraitByID(traits[i].GetInt("trait_id")); - if (!trait) + psTrait* trait=psserver->GetCacheManager()->GetTraitByID(traits[i].GetInt("trait_id")); + if(!trait) { Error3("%s has unknown trait id %s.", ShowID(pid), traits[i]["trait_id"]); } @@ -1043,31 +1045,31 @@ return false; } -void psCharacter::AddSpell(psSpell * spell) +void psCharacter::AddSpell(psSpell* spell) { spellList.Push(spell); } void psCharacter::SetFullName(const char* newFirstName, const char* newLastName) { - if ( !newFirstName ) + if(!newFirstName) { - Error1( "Null passed as first name..." ); + Error1("Null passed as first name..."); return; } // Error3( "SetFullName( %s, %s ) called...", newFirstName, newLastName ); // Update fist, last & full name - if ( strlen(newFirstName) ) + if(strlen(newFirstName)) { name = newFirstName; fullName = name; } - if ( newLastName ) + if(newLastName) { lastname = newLastName; - if ( strlen(newLastName) ) + if(strlen(newLastName)) { fullName += " "; fullName += lastname; @@ -1077,7 +1079,7 @@ //Error2( "New fullname is now: %s", fullname.GetData() ); } -void psCharacter::SetRaceInfo(psRaceInfo *rinfo) +void psCharacter::SetRaceInfo(psRaceInfo* rinfo) { race.SetBase(rinfo); } @@ -1085,7 +1087,7 @@ void OverridableRace::OnChange() { //if the race info is invalid do nothing - psRaceInfo *raceInfo = Current(); + psRaceInfo* raceInfo = Current(); if(!raceInfo) return; @@ -1126,7 +1128,7 @@ { //For now we check if we are near 1. In that case we disable the movement mod, else we send it directly. float movMod = Current()->GetSpeedModifier(); - if( movMod < 1+EPSILON && movMod > 1-EPSILON) + if(movMod < 1+EPSILON && movMod > 1-EPSILON) { psMoveModMsg modMsg(character->GetActor()->GetClientID(), psMoveModMsg::NONE, csVector3(0), 0); @@ -1142,12 +1144,12 @@ } } -psRaceInfo *psCharacter::GetRaceInfo() +psRaceInfo* psCharacter::GetRaceInfo() { return race.Current(); } -OverridableRace & psCharacter::GetOverridableRace() +OverridableRace &psCharacter::GetOverridableRace() { return race; } @@ -1158,7 +1160,7 @@ csString sql; sql.Format("INSERT INTO character_relationships VALUES (%u, %d, 'familiar', '')", pid.Unbox(), v.Unbox()); - if( !db->Command( sql ) ) + if(!db->Command(sql)) { Error3("Couldn't execute SQL %s!, %s's pet relationship is not saved.", sql.GetData(), ShowID(pid)); } @@ -1166,11 +1168,11 @@ void psCharacter::LoadActiveSpells() { - if (progressionScriptText.IsEmpty()) + if(progressionScriptText.IsEmpty()) return; - ProgressionScript *script = ProgressionScript::Create(psserver->entitymanager, psserver->GetCacheManager(), fullName, progressionScriptText); - if (!script) + ProgressionScript* script = ProgressionScript::Create(psserver->entitymanager, psserver->GetCacheManager(), fullName, progressionScriptText); + if(!script) { Error3("Saved progression script for >%s< is invalid:\n%s", fullName.GetData(), progressionScriptText.GetData()); return; @@ -1185,7 +1187,7 @@ delete script; } -void psCharacter::UpdateRespawn(csVector3 pos, float yrot, psSectorInfo *sector, InstanceID instance) +void psCharacter::UpdateRespawn(csVector3 pos, float yrot, psSectorInfo* sector, InstanceID instance) { spawnLoc.loc_sector = sector; spawnLoc.loc = pos; @@ -1193,15 +1195,15 @@ spawnLoc.worldInstance = instance; // Save to database - st_location & l = spawnLoc; + st_location &l = spawnLoc; psString sql; sql.AppendFmt("update characters set loc_x=%10.2f, loc_y=%10.2f, loc_z=%10.2f, loc_yrot=%10.2f, loc_sector_id=%u, loc_instance=%u where id=%u", - l.loc.x, l.loc.y, l.loc.z, l.loc_yrot, l.loc_sector->uid, l.worldInstance, pid.Unbox()); - if (db->CommandPump(sql) != 1) + l.loc.x, l.loc.y, l.loc.z, l.loc_yrot, l.loc_sector->uid, l.worldInstance, pid.Unbox()); + if(db->CommandPump(sql) != 1) { - Error3 ("Couldn't save character's position to database.\nCommand was " - "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); + Error3("Couldn't save character's position to database.\nCommand was " + "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); } } @@ -1215,7 +1217,7 @@ return charVariables.Get(name, charVariable()).value; } -Buffable<int>& psCharacter::GetBuffableVariable(const csString& name, const csString& value) +Buffable<int> &psCharacter::GetBuffableVariable(const csString &name, const csString &value) { if(!HasVariableDefined(name)) { @@ -1233,7 +1235,7 @@ //not already in the db (aka don't use this to load from the db) //right now this must not overwrite temporary variables or there could be issues. if(!HasVariableDefined(name)) - { + { charVariables.PutUnique(name, charVariable(name,value, true)); } else //update variables @@ -1256,10 +1258,10 @@ charVariables.DeleteAll(name); //update the database db->CommandPump("DELETE FROM character_variables where " - "character_id = %u and name = \"%s\"", - pid.Unbox(), - name.GetData()); - + "character_id = %u and name = \"%s\"", + pid.Unbox(), + name.GetData()); + } csHash<charVariable, csString>::ConstGlobalIterator psCharacter::GetVariables() const @@ -1295,7 +1297,7 @@ exp += W; bool updatedPP = false; - while (exp >= 200) + while(exp >= 200) { exp -= 200; if(progP != UINT_MAX) //don't allow overflow @@ -1346,7 +1348,7 @@ return 0; } } - + MathEnvironment env; env.Define("ZCost", skills.Get(skill).zCost); env.Define("YCost", skills.Get(skill).yCost); @@ -1360,18 +1362,18 @@ if(GetActor()->GetClient()->GetSecurityLevel() >= GM_DEVELOPER) { - psserver->SendSystemInfo(GetActor()->GetClientID(), - "Giving %d experience and %d practicepoints to skill %d with modifier %f.\n" - "zcost for the skill is %d for this level and %d for the next level\n" - "ycost for the skill is %d for this level and %d for the next level\n", - experiencePoints, practicePoints, skill, modifier, - skills.Get(skill).zCost, skills.Get(skill).zCostNext, - skills.Get(skill).yCost, skills.Get(skill).yCostNext); + psserver->SendSystemInfo(GetActor()->GetClientID(), + "Giving %d experience and %d practicepoints to skill %d with modifier %f.\n" + "zcost for the skill is %d for this level and %d for the next level\n" + "ycost for the skill is %d for this level and %d for the next level\n", + experiencePoints, practicePoints, skill, modifier, + skills.Get(skill).zCost, skills.Get(skill).zCostNext, + skills.Get(skill).yCost, skills.Get(skill).yCostNext); } AddExperiencePointsNotify(experiencePoints); - if (psserver->GetCacheManager()->GetSkillByID((PSSKILL)skill)) //check if skill is valid + if(psserver->GetCacheManager()->GetSkillByID((PSSKILL)skill)) //check if skill is valid { Skills().AddSkillPractice(skill, practicePoints); } @@ -1380,14 +1382,14 @@ return 0; } -void psCharacter::SetSpouseName( const char* name ) +void psCharacter::SetSpouseName(const char* name) { - if ( !name ) + if(!name) return; spouseName = name; - if ( !strcmp(name,"") ) + if(!strcmp(name,"")) isMarried = false; else isMarried = true; @@ -1402,7 +1404,7 @@ void psCharacter::SetProgressionPoints(unsigned int X,bool save) { unsigned int exp = vitals->GetExp(); - if (save) + if(save) { Debug3(LOG_SKILLXP, pid.Unbox(), "Updating PP points and Exp to %u and %u\n", X, exp); // Update the DB @@ -1414,7 +1416,7 @@ } } - vitals->SetPP( X ); + vitals->SetPP(X); } void psCharacter::UseProgressionPoints(unsigned int X) @@ -1423,12 +1425,12 @@ SetProgressionPoints(vitals->GetPP()-X,true); } -int psCharacter::GetMaxAllowedRealm( PSSKILL skill ) +int psCharacter::GetMaxAllowedRealm(PSSKILL skill) { unsigned int waySkillRank = skills.GetSkillRank(skill).Current(); // Special case for rank 0 people just starting. - if (waySkillRank == 0 && skills.GetSkillRank(skill).Base() == 0 && !skills.Get(skill).CanTrain()) + if(waySkillRank == 0 && skills.GetSkillRank(skill).Base() == 0 && !skills.Get(skill).CanTrain()) return 1; MathEnvironment env; @@ -1444,8 +1446,8 @@ maxRealmScript->Evaluate(&env); - MathVar *maxRealm = env.Lookup("MaxRealm"); - if (!maxRealm) + MathVar* maxRealm = env.Lookup("MaxRealm"); + if(!maxRealm) { Error1("Failed to evaluate MathScript >MaxRealm<."); return 0; @@ -1453,32 +1455,32 @@ return maxRealm->GetRoundValue(); } -void psCharacter::DropItem(psItem *&item, csVector3 suggestedPos, const csVector3& rot, bool guarded, bool transient, bool inplace) +void psCharacter::DropItem(psItem* &item, csVector3 suggestedPos, const csVector3 &rot, bool guarded, bool transient, bool inplace) { - if (!item) + if(!item) return; - if (item->IsInUse()) + if(item->IsInUse()) { psserver->SendSystemError(actor->GetClientID(),"You cannot drop an item while using it."); return; } // Handle position - if (inplace) + if(inplace) { // drop at the character's position. suggestedPos.x = location.loc.x; suggestedPos.y = location.loc.y; suggestedPos.z = location.loc.z; } - else if (suggestedPos != 0) + else if(suggestedPos != 0) { // User-specified position: check if it's close enough to the character. csVector3 delta; delta = suggestedPos - location.loc; - if (delta.Norm() > MAX_DROP_DISTANCE && actor->GetClient()->GetSecurityLevel() < GM_DEVELOPER) + if(delta.Norm() > MAX_DROP_DISTANCE && actor->GetClient()->GetSecurityLevel() < GM_DEVELOPER) { // Not close enough, cap it to the maximum range in the specified direction. suggestedPos = location.loc + delta.Unit() * MAX_DROP_DISTANCE; @@ -1508,11 +1510,11 @@ item->SetGuardingCharacterID(pid); gemObject* obj = EntityManager::GetSingleton().MoveItemToWorld(item, - location.worldInstance, location.loc_sector, - suggestedPos.x, suggestedPos.y, suggestedPos.z, - rot.x, rot.y, rot.z, this, transient); + location.worldInstance, location.loc_sector, + suggestedPos.x, suggestedPos.y, suggestedPos.z, + rot.x, rot.y, rot.z, this, transient); - if (obj) + if(obj) { // Assign new object to replace the original object item = obj->GetItem(); @@ -1521,27 +1523,27 @@ psMoney money; psDropEvent evt(pid, - GetCharName(), + GetCharName(), item->GetUID(), - item->GetName(), + item->GetName(), item->GetStackCount(), (int)item->GetCurrentStats()->GetQuality(), 0); evt.FireEvent(); // If a container, move its contents as well... - gemContainer *cont = dynamic_cast<gemContainer*> (obj); - if (cont) + gemContainer* cont = dynamic_cast<gemContainer*>(obj); + if(cont) { - for (size_t i=0; i < Inventory().GetInventoryIndexCount(); i++) + for(size_t i=0; i < Inventory().GetInventoryIndexCount(); i++) { - psItem *item = Inventory().GetInventoryIndexItem(i); - if (item->GetContainerID() == cont->GetItem()->GetUID()) + psItem* item = Inventory().GetInventoryIndexItem(i); + if(item->GetContainerID() == cont->GetItem()->GetUID()) { // This item is in the dropped container size_t slot = item->GetLocInParent() - PSCHARACTER_SLOT_BULK1; Inventory().RemoveItemIndex(i); - if (!cont->AddToContainer(item, actor->GetClient(), (int)slot)) + if(!cont->AddToContainer(item, actor->GetClient(), (int)slot)) { Error2("Cannot add item into container slot %zu.\n", slot); return; @@ -1565,19 +1567,20 @@ // inactive when strength spell expires). This could result in an // endless loop, hence this method locks itself against being called recursively. static bool lock_me = false; - if(lock_me) { - return; + if(lock_me) + { + return; } lock_me = true; csList<psItem*> itemlist; - for (int i = 0; i < PSITEMSTATS_STAT_COUNT; i++) + for(int i = 0; i < PSITEMSTATS_STAT_COUNT; i++) { modifiers[(PSITEMSTATS_STAT) i].Cancel(MODIFIER_FAKE_ACTIVESPELL); } - psItem *currentitem = NULL; + psItem* currentitem = NULL; // Loop through every holding item adding it to list of items to check for(int i = 0; i < PSCHARACTER_SLOT_BULK1; i++) @@ -1598,21 +1601,21 @@ { hasChanged = false; csList<psItem*>::Iterator it(itemlist); - while (it.HasNext()) + while(it.HasNext()) { currentitem = it.Next(); csString response; - if (!currentitem->CheckRequirements(this, response)) + if(!currentitem->CheckRequirements(this, response)) { continue; } - if (!currentitem->IsActive()) + if(!currentitem->IsActive()) { currentitem->RunEquipScript(actor); } // Check for attr bonuses - for (int i = 0; i < PSITEMSTATS_STAT_BONUS_COUNT; i++) + for(int i = 0; i < PSITEMSTATS_STAT_BONUS_COUNT; i++) { int attributeNum = currentitem->GetWeaponAttributeBonusType(i); if(attributeNum != -1) @@ -1622,14 +1625,15 @@ itemlist.Delete(it); break; } - } while (hasChanged); + } + while(hasChanged); // go through list of items whose requirements are not fulfilled and deactivate them csList<psItem*>::Iterator i(itemlist); - while( i.HasNext() ) + while(i.HasNext()) { currentitem = i.Next(); - if (currentitem->IsActive()) + if(currentitem->IsActive()) { currentitem->CancelEquipScript(); } @@ -1638,9 +1642,9 @@ lock_me = false; } -void psCharacter::AddLootItem(psItem *item) +void psCharacter::AddLootItem(psItem* item) { - if (!item) + if(!item) { Error2("Attempted to add 'null' loot item to character %s, ignored.",fullName.GetDataSafe()); return; @@ -1648,26 +1652,27 @@ lootPending.Push(item); } -size_t psCharacter::GetLootItems(psLootMessage& msg, EID entity, int cnum) +size_t psCharacter::GetLootItems(psLootMessage &msg, EID entity, int cnum) { - if (lootPending.GetSize() ) + if(lootPending.GetSize()) { csString loot; loot.Append("<loot>"); - for (size_t i=0; i<lootPending.GetSize(); i++) + for(size_t i=0; i<lootPending.GetSize(); i++) { - if (!lootPending[i]) { - printf("Potential ERROR: why this happens?"); - continue; + if(!lootPending[i]) + { + printf("Potential ERROR: why this happens?"); + continue; } csString item; csString escpxml_imagename = EscpXML(lootPending[i]->GetImageName()); csString escpxml_name = EscpXML(lootPending[i]->GetName()); item.Format("<li><image icon=\"%s\" count=\"1\" /><desc text=\"%s\" /><id text=\"%u\" /></li>", - escpxml_imagename.GetData(), - escpxml_name.GetData(), - lootPending[i]->GetBaseStats()->GetUID()); //use the basic item id to reference this. + escpxml_imagename.GetData(), + escpxml_name.GetData(), + lootPending[i]->GetBaseStats()->GetUID()); //use the basic item id to reference this. loot.Append(item); } loot.Append("</loot>"); @@ -1685,11 +1690,11 @@ { if(!lootPending[x]) { - printf("Potential ERROR: why this happens?"); - lootPending.DeleteIndex(x); - continue; + printf("Potential ERROR: why this happens?"); + lootPending.DeleteIndex(x); + continue; } - + if(categories.IsEmpty()) { items.Push(lootPending[x]); @@ -1697,9 +1702,9 @@ } else { - for (size_t i = 0; i < categories.GetSize(); i++) + for(size_t i = 0; i < categories.GetSize(); i++) { - if (lootPending[x]->GetCategory()->name.Downcase().Find(categories[i]) != csArrayItemNotFound) + if(lootPending[x]->GetCategory()->name.Downcase().Find(categories[i]) != csArrayItemNotFound) { items.Push(lootPending[x]); lootPending.DeleteIndex(x); @@ -1718,9 +1723,9 @@ { if(!lootPending[x]) { - printf("Potential ERROR: why this happens?"); - lootPending.DeleteIndex(x); - continue; + printf("Potential ERROR: why this happens?"); + lootPending.DeleteIndex(x); + continue; } if(lootPending[x]->GetBaseStats()->GetUID() == (uint32) id) @@ -1756,20 +1761,20 @@ SaveMoney(false); } -void psCharacter::SetMoney( psItem *& itemdata ) +void psCharacter::SetMoney(psItem* &itemdata) { /// Check to see if the item is a money item and treat as a special case. - if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_TRIA ) - money.AdjustTrias( itemdata->GetStackCount() ); + if(itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_TRIA) + money.AdjustTrias(itemdata->GetStackCount()); - if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_HEXA ) - money.AdjustHexas( itemdata->GetStackCount() ); + if(itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_HEXA) + money.AdjustHexas(itemdata->GetStackCount()); - if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_OCTA ) - money.AdjustOctas( itemdata->GetStackCount() ); + if(itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_OCTA) + money.AdjustOctas(itemdata->GetStackCount()); - if ( itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_CIRCLE ) - money.AdjustCircles( itemdata->GetStackCount() ); + if(itemdata->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_CIRCLE) + money.AdjustCircles(itemdata->GetStackCount()); psserver->GetCacheManager()->RemoveInstance(itemdata); SaveMoney(false); @@ -1778,16 +1783,16 @@ void psCharacter::SetMoney(psItemStats* MoneyObject, int amount) { /// Check to see if the item is a money item and treat as a special case. - if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_TRIA ) + if(MoneyObject->GetFlags() & PSITEMSTATS_FLAG_TRIA) money.AdjustTrias(amount); - if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_HEXA ) + if(MoneyObject->GetFlags() & PSITEMSTATS_FLAG_HEXA) money.AdjustHexas(amount); - if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_OCTA ) + if(MoneyObject->GetFlags() & PSITEMSTATS_FLAG_OCTA) money.AdjustOctas(amount); - if ( MoneyObject->GetFlags() & PSITEMSTATS_FLAG_CIRCLE ) + if(MoneyObject->GetFlags() & PSITEMSTATS_FLAG_CIRCLE) money.AdjustCircles(amount); SaveMoney(false); @@ -1795,15 +1800,15 @@ void psCharacter::AdjustMoney(psMoney m, bool bank) { - psMoney *mon; + psMoney* mon; if(bank) mon = &bankMoney; else mon = &money; - mon->Adjust( MONEY_TRIAS, m.GetTrias() ); - mon->Adjust( MONEY_HEXAS, m.GetHexas() ); - mon->Adjust( MONEY_OCTAS, m.GetOctas() ); - mon->Adjust( MONEY_CIRCLES, m.GetCircles() ); + mon->Adjust(MONEY_TRIAS, m.GetTrias()); + mon->Adjust(MONEY_HEXAS, m.GetHexas()); + mon->Adjust(MONEY_OCTAS, m.GetOctas()); + mon->Adjust(MONEY_CIRCLES, m.GetCircles()); SaveMoney(bank); } @@ -1825,10 +1830,10 @@ money.GetCircles(), money.GetTrias(), money.GetHexas(), money.GetOctas(), pid.Unbox()); } - if (db->CommandPump(sql) != 1) + if(db->CommandPump(sql) != 1) { - Error3 ("Couldn't save character's money to database.\nCommand was " - "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); + Error3("Couldn't save character's money to database.\nCommand was " + "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); } } @@ -1850,7 +1855,7 @@ } } - psItem *weapon = inventory.GetEffectiveWeaponInSlot((INVENTORY_SLOT_NUMBER) slot); + psItem* weapon = inventory.GetEffectiveWeaponInSlot((INVENTORY_SLOT_NUMBER) slot); if(!weapon)//shouldn't happen return; @@ -1860,9 +1865,9 @@ script->Evaluate(&env); - MathVar *phyDrain = env.Lookup("PhyDrain"); - MathVar *mntDrain = env.Lookup("MntDrain"); - if (!phyDrain || !mntDrain) + MathVar* phyDrain = env.Lookup("PhyDrain"); + MathVar* mntDrain = env.Lookup("MntDrain"); + if(!phyDrain || !mntDrain) { Error1("Failed to evaluate MathScript >StaminaCombat<."); return; @@ -1901,7 +1906,7 @@ bool res = vitals->Update(now); // if HP dropped to zero, provoke the killing process - if (GetHP() == 0 && actor != NULL && actor->IsAlive()) + if(GetHP() == 0 && actor != NULL && actor->IsAlive()) { actor->Kill(NULL); } @@ -1913,36 +1918,36 @@ return vitals->SendStatDRMessage(clientnum, eid, flags, group); } -VitalBuffable & psCharacter::GetMaxHP() +VitalBuffable &psCharacter::GetMaxHP() { return vitals->GetVital(VITAL_HITPOINTS).max; } -VitalBuffable & psCharacter::GetMaxMana() +VitalBuffable &psCharacter::GetMaxMana() { return vitals->GetVital(VITAL_MANA).max; } -VitalBuffable & psCharacter::GetMaxPStamina() +VitalBuffable &psCharacter::GetMaxPStamina() { return vitals->GetVital(VITAL_PYSSTAMINA).max; } -VitalBuffable & psCharacter::GetMaxMStamina() +VitalBuffable &psCharacter::GetMaxMStamina() { return vitals->GetVital(VITAL_MENSTAMINA).max; } -VitalBuffable & psCharacter::GetHPRate() +VitalBuffable &psCharacter::GetHPRate() { return vitals->GetVital(VITAL_HITPOINTS).drRate; } -VitalBuffable & psCharacter::GetManaRate() +VitalBuffable &psCharacter::GetManaRate() { return vitals->GetVital(VITAL_MANA).drRate; } -VitalBuffable & psCharacter::GetPStaminaRate() +VitalBuffable &psCharacter::GetPStaminaRate() { return vitals->GetVital(VITAL_PYSSTAMINA).drRate; } -VitalBuffable & psCharacter::GetMStaminaRate() +VitalBuffable &psCharacter::GetMStaminaRate() { return vitals->GetVital(VITAL_MENSTAMINA).drRate; } @@ -1959,7 +1964,7 @@ void psCharacter::AdjustStamina(float delta, bool pys) { - if (pys) + if(pys) vitals->AdjustVital(VITAL_PYSSTAMINA, DIRTY_VITAL_PYSSTAMINA, delta); else vitals->AdjustVital(VITAL_MENSTAMINA, DIRTY_VITAL_MENSTAMINA, delta); @@ -1996,8 +2001,8 @@ } staminaRatioWalk->Evaluate(&env); - MathVar *ratePhy = env.Lookup("PStaminaRate"); - MathVar *rateMen = env.Lookup("MStaminaRate"); + MathVar* ratePhy = env.Lookup("PStaminaRate"); + MathVar* rateMen = env.Lookup("MStaminaRate"); if(physical && ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); if(mental && rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); @@ -2024,8 +2029,8 @@ staminaRatioSit->Evaluate(&env); - MathVar *ratePhy = env.Lookup("PStaminaRate"); - MathVar *rateMen = env.Lookup("MStaminaRate"); + MathVar* ratePhy = env.Lookup("PStaminaRate"); + MathVar* rateMen = env.Lookup("MStaminaRate"); if(ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); if(rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); @@ -2053,8 +2058,8 @@ staminaRatioStill->Evaluate(&env); - MathVar *ratePhy = env.Lookup("PStaminaRate"); - MathVar *rateMen = env.Lookup("MStaminaRate"); + MathVar* ratePhy = env.Lookup("PStaminaRate"); + MathVar* rateMen = env.Lookup("MStaminaRate"); if(physical && ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); if(mental && rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); @@ -2066,7 +2071,7 @@ void psCharacter::SetStaminaRegenerationWork(int skill) { //Gms don't want to lose stamina when testing - if (actor->nevertired) + if(actor->nevertired) return; MathEnvironment env; @@ -2093,8 +2098,8 @@ staminaRatioWork->Evaluate(&env); - MathVar *ratePhy = env.Lookup("PStaminaRate"); - MathVar *rateMen = env.Lookup("MStaminaRate"); + MathVar* ratePhy = env.Lookup("PStaminaRate"); + MathVar* rateMen = env.Lookup("MStaminaRate"); if(ratePhy) GetPStaminaRate().SetBase(ratePhy->GetValue()); if(rateMen) GetMStaminaRate().SetBase(rateMen->GetValue()); @@ -2120,9 +2125,9 @@ staminaCalc->Evaluate(&env); - MathVar *basePhy = env.Lookup("BasePhy"); - MathVar *baseMen = env.Lookup("BaseMen"); - if (!basePhy || !baseMen) + MathVar* basePhy = env.Lookup("BasePhy"); + MathVar* baseMen = env.Lookup("BaseMen"); + if(!basePhy || !baseMen) { Error1("Failed to evaluate MathScript >StaminaBase<."); return; @@ -2137,19 +2142,19 @@ return vitals->GetStatsDirtyFlags(); } -void psCharacter::ClearStatsDirtyFlags( unsigned int dirtyFlags ) +void psCharacter::ClearStatsDirtyFlags(unsigned int dirtyFlags) { vitals->ClearStatsDirtyFlags(dirtyFlags); } void psCharacter::ResetSwings(csTicks timeofattack) { - psItem *Weapon; + psItem* Weapon; - for (int slot = 0; slot < PSCHARACTER_SLOT_BULK1; slot++) + for(int slot = 0; slot < PSCHARACTER_SLOT_BULK1; slot++) { Weapon = Inventory().GetEffectiveWeaponInSlot((INVENTORY_SLOT_NUMBER)slot); - if (Weapon !=NULL) + if(Weapon !=NULL) { inventory.GetEquipmentObject((INVENTORY_SLOT_NUMBER)slot).eventId=0; } @@ -2158,10 +2163,10 @@ void psCharacter::TagEquipmentObject(INVENTORY_SLOT_NUMBER slot,int eventId) { - psItem *Weapon; + psItem* Weapon; // Slot out of range - if (slot<0 || slot>=PSCHARACTER_SLOT_BULK1) + if(slot<0 || slot>=PSCHARACTER_SLOT_BULK1) return; // TODO: Reduce ammo if this is an ammunition using weapon @@ -2169,7 +2174,7 @@ // Reset next attack time Weapon=Inventory().GetEffectiveWeaponInSlot(slot); - if (!Weapon) //no need to continue + if(!Weapon) //no need to continue return; inventory.GetEquipmentObject(slot).eventId = eventId; @@ -2182,7 +2187,7 @@ int psCharacter::GetSlotEventId(INVENTORY_SLOT_NUMBER slot) { // Slot out of range - if (slot<0 || slot>=PSCHARACTER_SLOT_BULK1) + if(slot<0 || slot>=PSCHARACTER_SLOT_BULK1) return 0; return inventory.GetEquipmentObject(slot).eventId; @@ -2193,8 +2198,8 @@ float psCharacter::GetTargetedBlockValueForWeaponInSlot(INVENTORY_SLOT_NUMBER slot) { - psItem *weapon=Inventory().GetEffectiveWeaponInSlot(slot); - if (weapon==NULL) + psItem* weapon=Inventory().GetEffectiveWeaponInSlot(slot); + if(weapon==NULL) return 0.0f; return weapon->GetTargetedBlockValue(); @@ -2202,8 +2207,8 @@ float psCharacter::GetUntargetedBlockValueForWeaponInSlot(INVENTORY_SLOT_NUMBER slot) { - psItem *weapon=Inventory().GetEffectiveWeaponInSlot(slot); - if (weapon==NULL) + psItem* weapon=Inventory().GetEffectiveWeaponInSlot(slot); + if(weapon==NULL) return 0.0f; return weapon->GetUntargetedBlockValue(); @@ -2215,7 +2220,7 @@ float blockval=0.0f; int slot; - for (slot=0;slot<PSCHARACTER_SLOT_BULK1;slot++) + for(slot=0; slot<PSCHARACTER_SLOT_BULK1; slot++) blockval+=GetTargetedBlockValueForWeaponInSlot((INVENTORY_SLOT_NUMBER)slot); return blockval; @@ -2226,7 +2231,7 @@ float blockval=0.0f; int slot; - for (slot=0;slot<PSCHARACTER_SLOT_BULK1;slot++) + for(slot=0; slot<PSCHARACTER_SLOT_BULK1; slot++) blockval+=GetUntargetedBlockValueForWeaponInSlot((INVENTORY_SLOT_NUMBER)slot); return blockval; @@ -2235,8 +2240,8 @@ float psCharacter::GetCounterBlockValueForWeaponInSlot(INVENTORY_SLOT_NUMBER slot) { - psItem *weapon=inventory.GetEffectiveWeaponInSlot(slot); - if (weapon==NULL) + psItem* weapon=inventory.GetEffectiveWeaponInSlot(slot); + if(weapon==NULL) return 0.0f; return weapon->GetCounterBlockValue(); @@ -2244,16 +2249,17 @@ bool psCharacter::ArmorUsesSkill(INVENTORY_SLOT_NUMBER slot, PSITEMSTATS_ARMORTYPE skill) { - if (inventory.GetInventoryItem(slot)==NULL) + if(inventory.GetInventoryItem(slot)==NULL) return inventory.GetEquipmentObject(slot).default_if_empty->GetArmorType()==skill; else return inventory.GetInventoryItem(slot)->GetArmorType()==skill; } -void psCharacter::CalculateArmorForSlot(INVENTORY_SLOT_NUMBER slot, float& heavy_p, float& med_p, float& light_p) { - if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_LIGHT)) light_p+=1.0f/6.0f; - if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_MEDIUM)) med_p+=1.0f/6.0f; - if (ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_HEAVY)) heavy_p+=1.0f/6.0f; +void psCharacter::CalculateArmorForSlot(INVENTORY_SLOT_NUMBER slot, float &heavy_p, float &med_p, float &light_p) +{ + if(ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_LIGHT)) light_p+=1.0f/6.0f; + if(ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_MEDIUM)) med_p+=1.0f/6.0f; + if(ArmorUsesSkill(slot,PSITEMSTATS_ARMORTYPE_HEAVY)) heavy_p+=1.0f/6.0f; } @@ -2272,7 +2278,7 @@ CalculateArmorForSlot(PSCHARACTER_SLOT_BOOTS, heavy_p, med_p, light_p); MathEnvironment env; - + // Add actor to manipulate and points to calculate. env.Define("Actor", this); env.Define("HeavyPoints", heavy_p); @@ -2319,22 +2325,22 @@ */ void psCharacter::PracticeArmorSkills(unsigned int practice, INVENTORY_SLOT_NUMBER attackLocation) { - unsigned int heavy_p = 0; - unsigned int med_p = 0; - unsigned int light_p = 0; + unsigned int heavy_p = 0; + unsigned int med_p = 0; + unsigned int light_p = 0; - psItem *armor = inventory.GetEffectiveArmorInSlot(attackLocation); + psItem* armor = inventory.GetEffectiveArmorInSlot(attackLocation); - switch (armor->GetArmorType()) + switch(armor->GetArmorType()) { case PSITEMSTATS_ARMORTYPE_LIGHT: - light_p = practice; + light_p = practice; break; case PSITEMSTATS_ARMORTYPE_MEDIUM: - med_p = practice; + med_p = practice; break; case PSITEMSTATS_ARMORTYPE_HEAVY: - heavy_p = practice; + heavy_p = practice; break; default: break; @@ -2366,43 +2372,43 @@ { int slot; - for (slot=0;slot<PSCHARACTER_SLOT_BULK1;slot++) + for(slot=0; slot<PSCHARACTER_SLOT_BULK1; slot++) { - psItem *weapon=inventory.GetEffectiveWeaponInSlot((INVENTORY_SLOT_NUMBER)slot); - if (weapon!=NULL) + psItem* weapon=inventory.GetEffectiveWeaponInSlot((INVENTORY_SLOT_NUMBER)slot); + if(weapon!=NULL) PracticeWeaponSkills(weapon,practice); } } -void psCharacter::PracticeWeaponSkills(psItem * weapon, unsigned int practice) +void psCharacter::PracticeWeaponSkills(psItem* weapon, unsigned int practice) { - for (int index = 0; index < PSITEMSTATS_WEAPONSKILL_INDEX_COUNT; index++) + for(int index = 0; index < PSITEMSTATS_WEAPONSKILL_INDEX_COUNT; index++) { PSSKILL skill = weapon->GetWeaponSkill((PSITEMSTATS_WEAPONSKILL_INDEX)index); - if (skill != PSSKILL_NONE) + if(skill != PSSKILL_NONE) skills.AddSkillPractice(skill,practice); } } -void psCharacter::SetTraitForLocation(PSTRAIT_LOCATION location,psTrait *trait) +void psCharacter::SetTraitForLocation(PSTRAIT_LOCATION location,psTrait* trait) { - if (location<0 || location>=PSTRAIT_LOCATION_COUNT) + if(location<0 || location>=PSTRAIT_LOCATION_COUNT) return; traits[location]=trait; } -psTrait *psCharacter::GetTraitForLocation(PSTRAIT_LOCATION location) +psTrait* psCharacter::GetTraitForLocation(PSTRAIT_LOCATION location) { - if (location<0 || location>=PSTRAIT_LOCATION_COUNT) + if(location<0 || location>=PSTRAIT_LOCATION_COUNT) return NULL; return traits[location]; } -void psCharacter::GetLocationInWorld(InstanceID &instance,psSectorInfo *§orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) +void psCharacter::GetLocationInWorld(InstanceID &instance,psSectorInfo* §orinfo,float &loc_x,float &loc_y,float &loc_z,float &loc_yrot) { sectorinfo=location.loc_sector; loc_x=location.loc.x; @@ -2412,9 +2418,9 @@ instance = location.worldInstance; } -void psCharacter::SetLocationInWorld(InstanceID instance, psSectorInfo *sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) +void psCharacter::SetLocationInWorld(InstanceID instance, psSectorInfo* sectorinfo,float loc_x,float loc_y,float loc_z,float loc_yrot) { - psSectorInfo *oldsector = location.loc_sector; + psSectorInfo* oldsector = location.loc_sector; InstanceID oldInstance = location.worldInstance; location.loc_sector=sectorinfo; @@ -2424,9 +2430,9 @@ location.loc_yrot=loc_yrot; location.worldInstance = instance; - if (oldInstance != instance || (oldsector && oldsector != sectorinfo)) + if(oldInstance != instance || (oldsector && oldsector != sectorinfo)) { - if ( GetCharType() == PSCHARACTER_TYPE_PLAYER ) // NOT an NPC so it's ok to save location info + if(GetCharType() == PSCHARACTER_TYPE_PLAYER) // NOT an NPC so it's ok to save location info SaveLocationInWorld(); } } @@ -2436,33 +2442,33 @@ if(!loaded) return; - st_location & l = location; + st_location &l = location; psString sql; sql.AppendFmt("update characters set loc_x=%10.2f, loc_y=%10.2f, loc_z=%10.2f, loc_yrot=%10.2f, loc_sector_id=%u, loc_instance=%u where id=%u", - l.loc.x, l.loc.y, l.loc.z, l.loc_yrot, l.loc_sector->uid, l.worldInstance, pid.Unbox()); - if (db->CommandPump(sql) != 1) + l.loc.x, l.loc.y, l.loc.z, l.loc_yrot, l.loc_sector->uid, l.worldInstance, pid.Unbox()); + if(db->CommandPump(sql) != 1) { - Error3 ("Couldn't save character's position to database.\nCommand was " - "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); + Error3("Couldn't save character's position to database.\nCommand was " + "<%s>.\nError returned was <%s>\n",db->GetLastQuery(),db->GetLastError()); } } -psSpell * psCharacter::GetSpellByName(const csString& spellName) +psSpell* psCharacter::GetSpellByName(const csString &spellName) { - for (size_t i=0; i < spellList.GetSize(); i++) + for(size_t i=0; i < spellList.GetSize(); i++) { - if (spellList[i]->GetName().CompareNoCase(spellName)) return spellList[i]; + if(spellList[i]->GetName().CompareNoCase(spellName)) return spellList[i]; } return NULL; } -psSpell * psCharacter::GetSpellByIdx(int index) +psSpell* psCharacter::GetSpellByIdx(int index) { - if (index < 0 || (size_t)index >= spellList.GetSize()) + if(index < 0 || (size_t)index >= spellList.GetSize()) return NULL; return spellList[index]; } @@ -2483,24 +2489,24 @@ bool psCharacter::ReadyToExchange() { return (//TODO: Test for fighting && - //TODO: Test for casting spell - // !exchangeMgr.IsValid() && - !tradingStopped && - tradingStatus == NOT_TRADING); + //TODO: Test for casting spell + // !exchangeMgr.IsValid() && + !tradingStopped && + tradingStatus == NOT_TRADING); } -void psCharacter::MakeTextureString( csString& traits) +void psCharacter::MakeTextureString(csString &traits) { // initialize string traits = "<traits>"; // cycle through and add entries for each part - for (unsigned int i=0;i<PSTRAIT_LOCATION_COUNT;i++) + for(unsigned int i=0; i<PSTRAIT_LOCATION_COUNT; i++) { - psTrait *trait; + psTrait* trait; trait = GetTraitForLocation((PSTRAIT_LOCATION)i); - while (trait != NULL) + while(trait != NULL) { csString buff = trait->ToXML(true); traits.Append(buff); @@ -2511,53 +2517,53 @@ // terminate string traits.Append("</traits>"); - Notify2( LOG_CHARACTER, "Traits string: %s", (const char*)traits ); + Notify2(LOG_CHARACTER, "Traits string: %s", (const char*)traits); } -void psCharacter::MakeEquipmentString( csString& equipment ) +void psCharacter::MakeEquipmentString(csString &equipment) { equipment = "<equiplist>"; equipment.AppendFmt("<helm>%s</helm><bracer>%s</bracer><belt>%s</belt><cloak>%s</cloak>", EscpXML(helmGroup).GetData(), EscpXML(BracerGroup).GetData(), EscpXML(BeltGroup).GetData(), EscpXML(CloakGroup).GetData()); - for (int i=0; i<PSCHARACTER_SLOT_BULK1; i++) + for(int i=0; i<PSCHARACTER_SLOT_BULK1; i++) { psItem* item = inventory.GetInventoryItem((INVENTORY_SLOT_NUMBER)i); - if (item == NULL) + if(item == NULL) continue; - csString slot = EscpXML( psserver->GetCacheManager()->slotNameHash.GetName(i) ); - csString mesh = EscpXML( item->GetMeshName() ); - csString part = EscpXML( item->GetPa... [truncated message content] |
From: <wel...@us...> - 2013-08-05 13:18:50
|
Revision: 8748 http://sourceforge.net/p/planeshift/code/8748 Author: weltall2 Date: 2013-08-05 13:18:47 +0000 (Mon, 05 Aug 2013) Log Message: ----------- Added additional variables for spell math scripts. Modified Paths: -------------- trunk/src/server/bulkobjects/psspell.cpp trunk/src/server/bulkobjects/psspell.h Modified: trunk/src/server/bulkobjects/psspell.cpp =================================================================== --- trunk/src/server/bulkobjects/psspell.cpp 2013-08-04 22:18:26 UTC (rev 8747) +++ trunk/src/server/bulkobjects/psspell.cpp 2013-08-05 13:18:47 UTC (rev 8748) @@ -196,6 +196,7 @@ env.Define("Realm", realm); env.Define("RelatedStat", caster->GetSkillRank(way->related_stat_skill).Current()); env.Define("WaySkill", caster->GetSkillRank(way->skill).Current()); + env.Define("Caster", caster); script->Evaluate(&env); MathVar *manaCost = env.Lookup("ManaCost"); @@ -439,7 +440,7 @@ evt->QueueEvent(); } -void psSpell::Affect(gemActor *caster, gemObject *target, float range, float kFactor, float power, Client* client) const +void psSpell::Affect(gemActor *caster, gemObject *target, float range, float kFactor, float power, Client* client, csTicks castingDuration) const { const float chanceOfSuccess = ChanceOfCastSuccess(caster->GetCharacterData(), kFactor); float roll = psserver->GetRandom() * 100.f; @@ -605,6 +606,8 @@ { MathEnvironment env; env.Define("Realm", realm); + env.Define("Spell", const_cast<psSpell*>(this)); + env.Define("CastDuration", (float)castingDuration); env.Define("MaxRealm", caster->GetCharacterData()->GetMaxAllowedRealm(way->skill)); script->Evaluate(&env); @@ -724,6 +727,7 @@ this->kFactor = kFactor; this->powerLevel = powerLevel; this->client = client; + this->duration = castingDuration; target->RegisterCallback(this); caster->RegisterCallback(this); @@ -799,7 +803,7 @@ // Make sure caster is alive...there might be UDP jitter problems (PS#2728). if (caster->IsAlive()) { - spell->Affect(caster, target, max_range, kFactor, powerLevel, client); + spell->Affect(caster, target, max_range, kFactor, powerLevel, client, duration); } // Spell casting complete, we are now in PEACE mode again. Modified: trunk/src/server/bulkobjects/psspell.h =================================================================== --- trunk/src/server/bulkobjects/psspell.h 2013-08-04 22:18:26 UTC (rev 8747) +++ trunk/src/server/bulkobjects/psspell.h 2013-08-05 13:18:47 UTC (rev 8748) @@ -109,7 +109,10 @@ */ void Cast(gemActor *caster, float kFactor, Client *client) const; - void Affect(gemActor *caster, gemObject *target, float range, float kFactor, float power, Client* client) const; + /* + * @param castingDuration The time it was waited before the spell could affect targets. + */ + void Affect(gemActor *caster, gemObject *target, float range, float kFactor, float power, Client* client, csTicks castingDuration) const; int GetRealm() { return realm; } psWay* GetWay() { return way; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |