From: <ral...@us...> - 2014-04-30 00:39:57
|
Revision: 9482 http://sourceforge.net/p/planeshift/code/9482 Author: ralphcampbell Date: 2014-04-30 00:39:53 +0000 (Wed, 30 Apr 2014) Log Message: ----------- Fix 6292 - Items crafted that can't be held in hand fall to floor Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/workmanager.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2014-04-29 01:04:25 UTC (rev 9481) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2014-04-30 00:39:53 UTC (rev 9482) @@ -90,6 +90,7 @@ psCharacterInventory::~psCharacterInventory() { //delete main inventory + printf("~psCharacterInventory '%s' %zu\n", owner->GetCharName(), inventory.GetSize()); // XXX for(size_t t = 0 ; t < inventory.GetSize() ; t++) { psItem* curritem = inventory.Get(t).GetItem(); @@ -773,7 +774,7 @@ // If 'test' is true, the caller retains ownership. // If 'test' is false, the caller transfers ownership to the character's inventory. // -bool psCharacterInventory::Add(psItem* &item, bool test, bool stack, INVENTORY_SLOT_NUMBER slot, gemContainer* container, bool precise) +bool psCharacterInventory::Add(psItem* &item, bool test, bool stack, INVENTORY_SLOT_NUMBER slot, gemContainer* container, bool precise, bool skip_requirements) { Debug4(LOG_ITEM, 0, "%s item %s to slot %d",test?"Test add":"Add", item->GetName(), slot); @@ -922,7 +923,7 @@ } // Check to see if the proposed slot is usable. - if(!CheckSlotRequirements(item, slot)) + if(!skip_requirements && !CheckSlotRequirements(item, slot)) return false; // -1 means add failed uint32 parentID = 0; Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2014-04-29 01:04:25 UTC (rev 9481) +++ trunk/src/server/bulkobjects/pscharinventory.h 2014-04-30 00:39:53 UTC (rev 9482) @@ -246,13 +246,14 @@ * @param slot The slot in which we want to place an item. * (may be a slot number, or PSCHARACTER_SLOT_NONE) * @param container Pointer to container. - * @param precise Says whathever if the stacking should be precise and not ignore + * @param precise Says whatever if the stacking should be precise and not ignore * properties like quality. + * @param skip_requirements If set, don't check the slot requirements in order to place the item in the slot. * @return true if the item could be placed fully in the slot. * false if the item could not be placed. */ bool Add(psItem* &item, bool test = false, bool stack = true, - INVENTORY_SLOT_NUMBER slot = PSCHARACTER_SLOT_NONE, gemContainer* container = NULL, bool precise = true); + INVENTORY_SLOT_NUMBER slot = PSCHARACTER_SLOT_NONE, gemContainer* container = NULL, bool precise = true, bool skip_requirements = false); /** * Attempt to stack an item on an existing one if Add failed. Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2014-04-29 01:04:25 UTC (rev 9481) +++ trunk/src/server/workmanager.cpp 2014-04-30 00:39:53 UTC (rev 9482) @@ -2921,17 +2921,17 @@ return NULL; } - // Locate item in owner's slot + // Add new item to owner's slot. + // Note that we allow items that can't be equipped to be held. newItem->SetOwningCharacter(owner->GetCharacterData()); - owner->GetCharacterData()->Inventory().Add(newItem,false,false,slot); - if(!owner->GetCharacterData()->Inventory().EquipItem(newItem,slot)) + newItem->SetLoaded(); // Item is fully created + if(!owner->GetCharacterData()->Inventory().Add(newItem,false,false,slot,NULL,true,true)) { - // If can't equip then drop + // If can't add then drop owner->GetCharacterData()->DropItem(newItem); psserver->SendSystemError(clientNum, "Item %s was dropped because it could not be equiped.",newItem->GetName()); } - newItem->SetLoaded(); // Item is fully created // Check for conditions that would cause assert on newItem->Save(true) if(newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2014-05-04 21:15:43
|
Revision: 9498 http://sourceforge.net/p/planeshift/code/9498 Author: ralphcampbell Date: 2014-05-04 21:15:37 +0000 (Sun, 04 May 2014) Log Message: ----------- Update the database version and upgrade_schema.sql Modified Paths: -------------- trunk/src/server/database/mysql/server_options.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/psserver.cpp Modified: trunk/src/server/database/mysql/server_options.sql =================================================================== --- trunk/src/server/database/mysql/server_options.sql 2014-05-03 20:34:27 UTC (rev 9497) +++ trunk/src/server/database/mysql/server_options.sql 2014-05-04 21:15:37 UTC (rev 9498) @@ -29,7 +29,7 @@ # Dumping data for table server_options # -INSERT INTO `server_options` VALUES ('db_version','1278'); +INSERT INTO `server_options` VALUES ('db_version','1279'); INSERT INTO `server_options` VALUES ('game_time','15:00'); INSERT INTO `server_options` VALUES ('game_date','100-1-1'); INSERT INTO `server_options` VALUES ('instruments_category','27'); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2014-05-03 20:34:27 UTC (rev 9497) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2014-05-04 21:15:37 UTC (rev 9498) @@ -1858,6 +1858,18 @@ SOURCE attack_types.sql; UPDATE `server_options` SET `option_value`='1278' WHERE `option_name`='db_version'; +# Use item_stats.id and weapon_types.id for attack_types.weaponID and weaponType. +DROP table attack_types; +SOURCE attack_types.sql; +INSERT INTO command_group_assignment VALUES( "/version", 30 ); +INSERT INTO command_group_assignment VALUES( "/version", 25 ); +INSERT INTO command_group_assignment VALUES( "/version", 24 ); +INSERT INTO command_group_assignment VALUES( "/version", 23 ); +INSERT INTO command_group_assignment VALUES( "/version", 22 ); +INSERT INTO command_group_assignment VALUES( "/version", 21 ); +INSERT INTO command_group_assignment VALUES( "/version", 10 ); +UPDATE `server_options` SET `option_value`='1279' WHERE `option_name`='db_version'; + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2014-05-03 20:34:27 UTC (rev 9497) +++ trunk/src/server/psserver.cpp 2014-05-04 21:15:37 UTC (rev 9498) @@ -94,7 +94,7 @@ #include "workmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1278" +#define DATABASE_VERSION_STR "1279" psCharacterLoader psServer::CharacterLoader; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2014-08-31 19:07:54
|
Revision: 9549 http://sourceforge.net/p/planeshift/code/9549 Author: lpancallo Date: 2014-08-31 19:07:45 +0000 (Sun, 31 Aug 2014) Log Message: ----------- Added block , counterblock to shields description. by natoka Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/database/mysql/item_stats.sql Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2014-08-31 17:28:04 UTC (rev 9548) +++ trunk/src/server/bulkobjects/psitem.cpp 2014-08-31 19:07:45 UTC (rev 9549) @@ -3114,6 +3114,21 @@ itemInfo+= speed + damage; } + + // Item is a shield + if(GetIsShield() && !identifiable) + { + csString shield; + float targeted_block_value, untargeted_block_value, counter_block_value; + targeted_block_value = GetTargetedBlockValue(); + untargeted_block_value = GetUntargetedBlockValue(); + counter_block_value = GetCounterBlockValue(); + + shield.Format("\n\nTargeted Block: %.2f\nUntargeted Block: %.2f\nCounter Block: %.2f", + targeted_block_value, untargeted_block_value, counter_block_value); + + itemInfo+= shield; + } // Item is armor if(GetIsArmor() && !identifiable) Modified: trunk/src/server/database/mysql/item_stats.sql =================================================================== --- trunk/src/server/database/mysql/item_stats.sql 2014-08-31 17:28:04 UTC (rev 9548) +++ trunk/src/server/database/mysql/item_stats.sql 2014-08-31 19:07:45 UTC (rev 9549) @@ -304,7 +304,7 @@ -- Test on crafting INSERT INTO `item_stats` VALUES (3013,'B','Catalog of Shields',1.00,100.00,15,0,0,'BULK MIND','STACKABLE',0.10,4,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,1.00,0.00,2.10,1.00,0.20,0.20,0.20,0.00,'books#bookclosed01','/planeshift/potions/potion01c_icon.dds','','','','','0',15,400.00,'RECIPE','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'Extensive catalog of shield designs. Armed with these designs, a skilled smith will be able to construct most common shields. The illustrations show how a variety of shield cores can be created by hammering different amounts of hot metal that is shaped upon the anvil with a hammer. The shield core can then be combined with a shield handle to create the final piece of equipment.','nosound',50,'',NULL,NULL,-1,2,"",'Y'); -INSERT INTO `item_stats` VALUES (4000,'B','Round Shield',7.00,5.00,100,0,0,'BULK LEFTHAND RIGHTHAND','STACKABLE',0.10,0,-1,-1,'0','0','0',0.00,0.00,0.00,6.00,0.00,0.00,4.00,2.00,0.20,0.20,0.20,0.00,'weapons#round_shield_01a','/planeshift/weapons/roundshield01a_icon.dds','','','','','0',1,150.00,'SHIELD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'0','nosound',50,'',NULL,NULL,-1,2,"",'Y'); +INSERT INTO `item_stats` VALUES (4000,'B','Round Shield',7.00,5.00,100,0,0,'BULK LEFTHAND RIGHTHAND','STACKABLE SHIELD',0.10,0,-1,-1,'0','0','0',0.00,0.00,0.00,6.00,0.00,0.00,4.00,2.00,0.20,0.20,0.20,0.00,'weapons#round_shield_01a','/planeshift/weapons/roundshield01a_icon.dds','','','','','0',1,150.00,'SHIELD','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'0','nosound',50,'',NULL,NULL,-1,2,"",'Y'); INSERT INTO `item_stats` VALUES (4085,'B','Heated Iron Stock',3.00,100.00,5,0,0,'BULK LEFTHAND RIGHTHAND','STACKABLE EQUIP_STACKABLE',0.10,4,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,1.00,0.00,2.10,1.00,0.20,0.20,0.20,0.00,'potions#potion01a','/planeshift/potions/smallpotion01a_icon.dds','','','','','0',16,10.00,'','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'Long metal bars of iron used in smiting that are yellow hot.','nosound',50,'',NULL,NULL,-1,2,"",'Y'); INSERT INTO `item_stats` VALUES (4320,'B','Iron Half Circle',1.00,100.00,5,0,0,'BULK LEFTHAND RIGHTHAND','STACKABLE',0.10,4,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,1.00,0.00,2.10,1.00,0.20,0.20,0.20,0.00,'potions#potion01a','/planeshift/potions/potion01b_icon.dds','','','','','0',17,10.00,'','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'Almost half the size of a small buckler these metal half circles help protect the center of the shield.','nosound',50,'',NULL,NULL,-1,2,"",'Y'); INSERT INTO `item_stats` VALUES (4811,'B','Anvil',99999.00,100.00,128,50,0,'BULK','STACKABLE',0.10,4,-1,-1,'0','0','0',0.00,0.00,0.00,0.00,1.00,0.00,2.10,1.00,0.20,0.20,0.20,0.00,'potions#potion01a','/planeshift/potions/potion01a_icon.dds','','','','','0',6,2000.00,'TOOL','',0.00,'',0.00,'',0.00,'0',0,0.0000,0,0,0,1,'Smith equipment for hammering items against.','nosound',50,'',NULL,NULL,-1,2,"",'Y'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2014-08-31 19:13:19
|
Revision: 9550 http://sourceforge.net/p/planeshift/code/9550 Author: lpancallo Date: 2014-08-31 19:13:14 +0000 (Sun, 31 Aug 2014) Log Message: ----------- Allow display of calculated modifiers. by natoka. Modified Paths: -------------- trunk/src/server/scripting.cpp trunk/src/server/scripting.h Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-08-31 19:07:45 UTC (rev 9549) +++ trunk/src/server/scripting.cpp 2014-08-31 19:13:14 UTC (rev 9550) @@ -138,7 +138,7 @@ virtual ~AppliedOp() { } virtual bool Load(iDocumentNode* node) = 0; virtual void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) = 0; - virtual const csString GetDescription() + virtual const csString GetDescription(MathEnvironment* env) { return ""; } @@ -196,7 +196,7 @@ return Applied1::Load(node); } - const csString GetDescription() + virtual const csString GetDescription(MathEnvironment* env) { csString descr; if(vital == "mana-rate") @@ -214,8 +214,7 @@ else if(vital == "mstamina-max") descr = "Bonus Max Mental Stamina"; - MathEnvironment env; - float val = value->Evaluate(&env); + float val = value->Evaluate(env); descr.AppendFmt(": %0.1f\n",val); return descr; } @@ -324,7 +323,7 @@ return Applied1::Load(node); } - const csString GetDescription() + virtual const csString GetDescription(MathEnvironment* env) { csString descr; if(statname == "agi") @@ -340,8 +339,7 @@ else if(statname == "wil") descr = "Will"; - MathEnvironment env; - int val = (int)value->Evaluate(&env); + int val = (int)value->Evaluate(env); descr.AppendFmt(": %d\n",val); return descr; } @@ -390,11 +388,11 @@ return Applied1::Load(node); } - const csString GetDescription() + virtual const csString GetDescription(MathEnvironment* env) { csString descr = skillname; - MathEnvironment env; - int val = (int)value->Evaluate(&env); + + int val = (int)value->Evaluate(env); descr.AppendFmt(": %d\n",val); return descr; } @@ -427,6 +425,12 @@ { return Applied2::Load(node); } + + virtual const csString GetDescription(MathEnvironment* env) + { + value->Evaluate(env); + return ""; + } void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) { @@ -453,13 +457,13 @@ return Applied1::Load(node); } - const csString GetDescription() + virtual const csString GetDescription(MathEnvironment* env) { csString descr; if(type == "atk") descr = "Attack modifier"; else if(type == "def") descr = "Defence modifier"; - MathEnvironment env; - float val = value->Evaluate(&env); + + float val = value->Evaluate(env); descr.AppendFmt(": %0.2f\n",val); return descr; } @@ -1068,6 +1072,10 @@ { bindings->Evaluate(env); } + virtual const csString GetDescription(MathEnvironment* env) { + bindings->Evaluate(env); + return ""; + } protected: MathScript* bindings; /// an embedded MathScript containing new bindings @@ -1293,12 +1301,14 @@ { if(!description.IsEmpty()) return description; + + MathEnvironment env; csPDelArray<AppliedOp>::Iterator it = ops.GetIterator(); while(it.HasNext()) { AppliedOp* op = it.Next(); - description += op->GetDescription(); + description += op->GetDescription(&env); } return description; @@ -1315,6 +1325,10 @@ virtual bool Load(iDocumentNode* node) = 0; virtual void Run(MathEnvironment* env) = 0; + virtual const csString GetDescription(MathEnvironment* env) + { + return ""; + } }; //---------------------------------------------------------------------------- @@ -1435,6 +1449,14 @@ delete body; } + virtual const csString GetDescription(MathEnvironment* inner) + { + //MathEnvironment inner(outer); + bindings->Evaluate(inner); + //return body->GetDescription( inner); + return ""; + } + bool Load(iDocumentNode* node) { bindings = MathScript::Create("<let> bindings", node->GetAttributeValue("vars")); @@ -3292,3 +3314,4 @@ } + Modified: trunk/src/server/scripting.h =================================================================== --- trunk/src/server/scripting.h 2014-08-31 19:07:45 UTC (rev 9549) +++ trunk/src/server/scripting.h 2014-08-31 19:13:14 UTC (rev 9550) @@ -96,6 +96,10 @@ static ApplicativeScript* Create(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, SPELL_TYPE type, const char* name, const char* duration); ActiveSpell* Apply(MathEnvironment* env, bool registerCancelEvent = true); + /*** + * retrieve the description of the Applicativescripts commands + * + */ const csString &GetDescription(); protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jo...@us...> - 2014-09-12 23:25:06
|
Revision: 9562 http://sourceforge.net/p/planeshift/code/9562 Author: joelyon Date: 2014-09-12 23:25:01 +0000 (Fri, 12 Sep 2014) Log Message: ----------- Natoka's "Require possessed amount" patch. Modified Paths: -------------- trunk/src/server/bulkobjects/pscharinventory.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/bulkobjects/psquest.cpp trunk/src/server/bulkobjects/psquestprereqops.cpp trunk/src/server/bulkobjects/psquestprereqops.h trunk/src/server/usermanager.cpp Modified: trunk/src/server/bulkobjects/pscharinventory.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.cpp 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/bulkobjects/pscharinventory.cpp 2014-09-12 23:25:01 UTC (rev 9562) @@ -1069,8 +1069,9 @@ return NULL; } -bool psCharacterInventory::hasItemName(csString &itemname, bool includeEquipment, bool includeBulk, float qualityMin, float qualityMax) +bool psCharacterInventory::hasItemsWithName(csString &itemname, bool includeEquipment, bool includeBulk, int amountMin, int amountMax, float qualityMin, float qualityMax) { + int itemCount = 0; for(size_t i=1; i < inventory.GetSize(); i++) { if(inventory[i].item && (csString)inventory[i].item->GetName() == itemname && @@ -1078,8 +1079,23 @@ (includeBulk || inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK1) && (qualityMin < 1.0f || inventory[i].item->GetItemQuality() >= qualityMin) && (qualityMax < 1.0f || inventory[i].item->GetItemQuality() <= qualityMax)) - return true; + { + // either add the full stack amount or just 1 + if (inventory[i].item->GetIsStackable()) + { + itemCount += inventory[i].item->GetStackCount(); + } + else + { + itemCount++; + } + } } + if ((itemCount >= amountMin) && ((amountMax == -1) || itemCount <= amountMax)) + { + return true; + } + return false; } @@ -1526,8 +1542,10 @@ return false; } -bool psCharacterInventory::hasItemCategory(csString &categoryname, bool includeEquipment, bool includeBulk, bool includeStorage, float qualityMin, float qualityMax) +bool psCharacterInventory::hasItemCategory(csString &categoryname, bool includeEquipment, bool includeBulk, bool includeStorage, int amountMin, int amountMax, float qualityMin, float qualityMax) { + int itemCount = 0; + if(includeEquipment || includeBulk) { // Inventory indexes start at 1. 0 is reserved for the "NULL" item. @@ -1538,7 +1556,17 @@ (includeBulk || inventory[i].item->GetLocInParent(true) < PSCHARACTER_SLOT_BULK1) && (qualityMin < 1.0f || inventory[i].item->GetItemQuality() >= qualityMin) && (qualityMax < 1.0f || inventory[i].item->GetItemQuality() <= qualityMax)) - return true; + { + // either add the full stack amount or just 1 + if (inventory[i].item->GetIsStackable()) + { + itemCount += inventory[i].item->GetStackCount(); + } + else + { + itemCount++; + } + } } } else if(includeStorage) @@ -1548,9 +1576,14 @@ if((storageInventory[i]->GetCategory()->name == categoryname) && (qualityMin < 1.0f || inventory[i].item->GetItemQuality() >= qualityMin) && (qualityMax < 1.0f || inventory[i].item->GetItemQuality() <= qualityMax)) - return true; + itemCount++; } } + // minimum amount must always be fulfilled; maximum is ignored if it's below 0 + if ((itemCount >= amountMin) && ((amountMax < 0) || itemCount <= amountMax)) + { + return true; + } return false; } Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/bulkobjects/pscharinventory.h 2014-09-12 23:25:01 UTC (rev 9562) @@ -284,11 +284,13 @@ * @param itemname The name of the item to search for. * @param includeEquipment include equipment in the search. * @param includeBulk include bulk in the search. + * @param amountMin The minimum amount of items that must be in the inventory + * @param amountMax The maximum amount of items that can be in the inventory, -1 to ignore * @param qualityMin The minimum quality the item must have, 0 to ignore. * @param qualityMax The maximum quality the item must have, 0 to ignore. * @return The item in the given slot. NULL if no item was found. */ - bool hasItemName(csString &itemname, bool includeEquipment, bool includeBulk, float qualityMin = 0, float qualityMax = 0); + bool hasItemsWithName(csString &itemname, bool includeEquipment, bool includeBulk, int amountMin = 1, int amountMax = -1, float qualityMin = 0, float qualityMax = 0); /** * Get an item that is in the equipment inventory. @@ -447,11 +449,13 @@ * @param includeEquipment include equipment in the search. * @param includeBulk searches for the item only in the equipment if true. * @param includeStorage include storage in the search. + * @param amountMin The minimum amount of this item that the inventory must have, 1 is default. + * @param amountMax The maximum amount of this item that the inventory can have, -1 to ignore. * @param qualityMin The minimum quality the item must have, 0 to ignore. * @param qualityMax The maximum quality the item must have, 0 to ignore. * @return true if the item was found, false if it wasn't. */ - bool hasItemCategory(csString &categoryname, bool includeEquipment, bool includeBulk, bool includeStorage = false, float qualityMin = 0, float qualityMax = 0); + bool hasItemCategory(csString &categoryname, bool includeEquipment, bool includeBulk, bool includeStorage = false, int amountMin = 1, int amountMax = -1 , float qualityMin = 0, float qualityMax = 0); /** * Iterates over the entire inventory to get a list of all the items from a particular category. Modified: trunk/src/server/bulkobjects/psquest.cpp =================================================================== --- trunk/src/server/bulkobjects/psquest.cpp 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/bulkobjects/psquest.cpp 2014-09-12 23:25:01 UTC (rev 9562) @@ -365,7 +365,10 @@ bool includeInventory = topNode->GetAttributeValueAsBool("inventory", false); float qualityMin = topNode->GetAttributeValueAsFloat("qualitymin", 0.0f); float qualityMax = topNode->GetAttributeValueAsFloat("qualitymax", 0.0f); - prerequisite.AttachNew(new psQuestPrereqOpItem(name, category, includeInventory, qualityMin, qualityMax)); + int amountMin = topNode->GetAttributeValueAsInt("amountmin", 1); // at least one item is required + int amountMax = topNode->GetAttributeValueAsInt("amountmax", -1); + + prerequisite.AttachNew(new psQuestPrereqOpItem(name, category, includeInventory, amountMin, amountMax, qualityMin, qualityMax)); } else if(strcmp(topNode->GetValue(), "activemagic") == 0) { Modified: trunk/src/server/bulkobjects/psquestprereqops.cpp =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.cpp 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/bulkobjects/psquestprereqops.cpp 2014-09-12 23:25:01 UTC (rev 9562) @@ -156,7 +156,7 @@ bool psQuestPrereqOpRequire::Check(psCharacter* character) { - // Count the number of prereqs that is valid. + // Count the number of prereqs that are valid. int count=0; for(size_t i = 0; i < prereqlist.GetSize(); i++) { @@ -165,7 +165,7 @@ count++; } } - // Verify that the appropiate numbers of prereqs was counted. + // Verify that the appropiate number of prereqs were counted. return ((min == -1 || count >= min) && (max == -1 || count <= max)); } @@ -360,9 +360,9 @@ bool psQuestPrereqOpItem::Check(psCharacter* character) //TODO: extend this { if(!categoryName.IsEmpty()) - return character->Inventory().hasItemCategory(categoryName, true, includeInventory, qualityMin, qualityMax); + return character->Inventory().hasItemCategory(categoryName, true, includeInventory, amountMin, amountMax, qualityMin, qualityMax); if(!itemName.IsEmpty()) - return character->Inventory().hasItemName(itemName, true, includeInventory, qualityMin, qualityMax); + return character->Inventory().hasItemsWithName(itemName, true, includeInventory, amountMin, amountMax, qualityMin, qualityMax); return false; } @@ -386,7 +386,7 @@ csPtr<psQuestPrereqOp> psQuestPrereqOpItem::Copy() { csRef<psQuestPrereqOpItem> copy; - copy.AttachNew(new psQuestPrereqOpItem(itemName, categoryName, includeInventory, qualityMin, qualityMax)); + copy.AttachNew(new psQuestPrereqOpItem(itemName, categoryName, includeInventory, amountMin, amountMax, qualityMin, qualityMax)); return csPtr<psQuestPrereqOp>(copy); } Modified: trunk/src/server/bulkobjects/psquestprereqops.h =================================================================== --- trunk/src/server/bulkobjects/psquestprereqops.h 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/bulkobjects/psquestprereqops.h 2014-09-12 23:25:01 UTC (rev 9562) @@ -256,9 +256,9 @@ /** * Construct a require operator. * - * @param min_required The minimum of childs needed. There are no lower + * @param min_required The minimum of childs needed. There is no lower * limit if this is set to -1. - * @param max_required The maximum of childs needed. There are no upper + * @param max_required The maximum of childs needed. There is no upper * limit if this is set to -1. */ psQuestPrereqOpRequire(int min_required,int max_required); @@ -270,13 +270,13 @@ /** * Check if a number of prerequisites are true. Limited by - * a min and a max number. If any of thise are -1 the limit + * a min and a max number. If any of these are -1 the limit * will be ignored. * * number = number of childs true * prerequisite = number >= min and number <= max * - * @param character The character that are checking for a prerequisite + * @param character The character being checked for a prerequisite * @return True if more than min and less than max of the child prerequisites are true */ virtual bool Check(psCharacter* character); @@ -620,12 +620,14 @@ class psQuestPrereqOpItem : public psQuestPrereqOp { protected: - csString itemName; - csString categoryName; - bool includeInventory; - float qualityMin; - float qualityMax; - + csString itemName; /// itemname of the item (if empty, category must be set) + csString categoryName; /// category of the item (if empty, itemname must be set) + bool includeInventory; /// whether equiped or inventory is included in searches + int amountMin; /// minimum amount of this sort of item + int amountMax; /// maximum amount of this sort of item + float qualityMin; /// minimum quality of the required item + float qualityMax; /// maximum quality of the required item + public: /** @@ -638,9 +640,9 @@ * @param qualityMin A minimum quality. * @param qualityMax A maximum quality */ - psQuestPrereqOpItem(const char* itemName, const char* categoryName, bool includeInventory, float qualityMin, float qualityMax): + psQuestPrereqOpItem(const char* itemName, const char* categoryName, bool includeInventory, int amountMin, int amountMax, float qualityMin, float qualityMax): itemName(itemName), categoryName(categoryName), includeInventory(includeInventory), - qualityMin(qualityMin), qualityMax(qualityMax) {}; + amountMin(amountMin), amountMax(amountMax), qualityMin(qualityMin), qualityMax(qualityMax) {}; /** * Destructor. Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2014-09-10 02:45:23 UTC (rev 9561) +++ trunk/src/server/usermanager.cpp 2014-09-12 23:25:01 UTC (rev 9562) @@ -2888,6 +2888,7 @@ // database to test this... // set the name +fprintf(stderr, "*******UserManager::Rename '%s'\n", target->GetData() ); item->SetName(target->GetData()); // save the item This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jo...@us...> - 2014-09-13 18:03:43
|
Revision: 9564 http://sourceforge.net/p/planeshift/code/9564 Author: joelyon Date: 2014-09-13 18:03:40 +0000 (Sat, 13 Sep 2014) Log Message: ----------- missed & updated files in checking of require possessed amount patch Modified Paths: -------------- trunk/src/server/database/mysql/quest_scripts.sql trunk/src/server/database/mysql/quests.sql trunk/src/server/questmanager.cpp Modified: trunk/src/server/database/mysql/quest_scripts.sql =================================================================== --- trunk/src/server/database/mysql/quest_scripts.sql 2014-09-13 18:01:34 UTC (rev 9563) +++ trunk/src/server/database/mysql/quest_scripts.sql 2014-09-13 18:03:40 UTC (rev 9564) @@ -64,7 +64,10 @@ ('212',211,'P:give me familiar\r\nMenu:Could you give me a familiar?\r\n\r\nMerchant: Yes\r\nGive 1 Ring of Familiar.\r\nRun Script create_familiar.\r\n'), ('213',212,'P:activate mechanism\r\nMenu:Can you please move those ingots for me?\r\n\r\nSmith: Yes\r\nRun Script mechanism <<\'npc1_ingots\'>>.\r\n'), ('214',-1,'P:hire guard\r\nMenu: I\'ve heard you hire out guards.\r\n\r\nHireMaster1: Would you like to hire a guard.\r\n\r\nP:yes\r\nMenu: Yes I would like to hire a gurad.\r\n\r\nHireMaster1: I give you a guard for 1 tria.\r\n\r\nPlayer gives HireMaster1 1 tria.\r\nMenu: Give 1 tria.\r\n\r\nHireMaster1: Thank you.\r\nHire start.Hire master 111. Hire type Guard GuardType.Hire confirm.'), - ('215',-1,'P:hire merchant\r\nMenu: I\'ve heard you hire out merchants.\r\n\r\nHireMaster1: Would you like to hire a merchant.\r\n\r\nP:yes\r\nMenu: Yes I would like to hire a merchant.\r\nHireMaster1: I give you a merchant for 1 octa.\r\nPlayer gives HireMaster1 1 octa.\r\nMenu: Give 1 octa.\r\n\r\nHireMaster1: Thank you.\r\nHire start.Hire master 112. Hire type Merchant MerchantType.Hire confirm.'); + ('215',-1,'P:hire merchant\r\nMenu: I\'ve heard you hire out merchants.\r\n\r\nHireMaster1: Would you like to hire a merchant.\r\n\r\nP:yes\r\nMenu: Yes I would like to hire a merchant.\r\nHireMaster1: I give you a merchant for 1 octa.\r\nPlayer gives HireMaster1 1 octa.\r\nMenu: Give 1 octa.\r\n\r\nHireMaster1: Thank you.\r\nHire start.Hire master 112. Hire type Merchant MerchantType.Hire confirm.'), +(216, 213, 'P: Protection from the sky\r\nMenu: Hello!\r\n\r\nQuestMaster2: Hello $sir my good friend! Do you have a round shield perhaps? You really need one so that the sky doesn''t fall on your head.\r\nP: No P: Yes\r\n\r\nQ: I will not bother you anymore\r\n\r\nQ: Great! Then let me check if you really have one.\r\nP: No P: Yes\r\n\r\nAssign Quest\r\n\r\n...\r\n\r\nRequire possessed amount 1 item Round Shield\r\n\r\nP: Show QuestMaster2 the Round Shield\r\n\r\nQuestMaster2: I have been waiting for this. Show me your protection from the sky.\r\n\r\nPlayer gives QuestMaster2 Round Shield\r\n\r\nQuestMaster2: Yeah. One shield. Only one!! That''s nowhere near a good protection. You''ll need at 6 additional ones!\r\n\r\nGive Round Shield. Complete Protection from the sky Step 2\r\n\r\n...\r\n\r\nRequire completion of Protection from the sky Step 2\r\nRequire possessed amount 6-6 2-8 item Round Shield\r\n\r\nP: show QuestMaster2 the Round Shield\r\n\r\nQuestMaster2: Oh, yeah now you are really safe my friend.\r\n\r\nGive 2 octa\r\n'), +(217, 215, 'P: give me a quest.\r\nMenu: Hello!\r\n\r\nQuestMaster2: Hello $sir, do you have 6 round shields perhaps?\r\nP: No. P: Yes.\r\nMenu: No, I don''t. Menu: Yes, sure I have.\r\nQ: I will not bother you anymore.\r\n\r\nQ: Great! Then let me check if you really have one.\r\n\r\nAssign Quest.\r\n\r\n...\r\n\r\n# step 2\r\nRequire possessed amount 6 item Round Shield.\r\n\r\nPlayer gives QuestMaster2 6 Round Shield.\r\nMenu: I have your Shields.\r\nQuestMaster2: Great, but I don''t need them anymore. Take them back.\r\n\r\nGive 2 octa. Give 6 Round Shield.'), +(221, 219, 'P: Long Trade.\r\nMenu: Trade !\r\n\r\nQuestMaster2: Hello $sir, do you have 6 round shields perhaps?\r\nP: No. P: Yes.\r\nMenu: No, I don''t. Menu: Yes, sure I have.\r\nQ: I will not bother you anymore.\r\n\r\nQ: Great! Then let me check if you really have one.\r\n\r\nAssign Quest.\r\n\r\n...\r\n\r\n# step 2\r\nRequire possessed amount 5-6 item Round Shield.\r\n\r\nPlayer gives QuestMaster2 5 Round Shield.\r\nMenu: I have your Shields.\r\nQuestMaster2: Great, but I don''t need them anymore. Take them back.\r\nQuestnote Give QuestMaster2 5 Round Shields while you only possess up to 6 Round Shields.\r\n\r\nComplete MinMax Step 2\r\n\r\n...\r\n\r\n# step 3\r\nRequire completion of MinMax Step 2. Require possessed amount 1-2 10 item Round Shield.\r\n\r\nPlayer gives QuestMaster2 2 Round Shield.\r\nMenu: Here are some mediocre shields.\r\nQuestMaster2: Great, they are indeed mediocre. [ QuestMaster2 folds his shield testing device. ] But I don''t need them anymore.\r\nQuestnote Give QuestMaster2 2 Round Shields with a minimum quality of 10.\r\nGive 2 Round Shield. Complete MinMax Step 3\r\n\r\n...\r\n\r\n# step 4\r\nRequire completion of MinMax Step 3. Require possessed amount 2-3 20-50 item Round Shield.\r\nPlayer gives QuestMaster2 2 Round Shield.\r\nMenu: Here are some better shields.\r\nQuestMaster2: [ QuestMaster2 unfolds his shield testing device. ] Great, they are indeed better. [ QuestMaster2 folds his shield testing device. ] Give 4 Round Shield.\r\n\r\nGive 2 octa. Give 6 Round Shield.'); /*!40000 ALTER TABLE `quest_scripts` ENABLE KEYS*/; Modified: trunk/src/server/database/mysql/quests.sql =================================================================== --- trunk/src/server/database/mysql/quests.sql 2014-09-13 18:01:34 UTC (rev 9563) +++ trunk/src/server/database/mysql/quests.sql 2014-09-13 18:03:40 UTC (rev 9564) @@ -71,6 +71,11 @@ INSERT INTO `quests` VALUES (210,'Fortune Quest','Give the merchant 5 tria and he will tell your fortune.','',0,0,0,0,0,'Newbie',''); INSERT INTO `quests` VALUES (211,'Familiar Quest','Ask for a familiar and he will give you.','',0,0,0,0,0,'Newbie',''); INSERT INTO `quests` VALUES (212,'Mechanisms Quest','Testing of mechanisms.','',0,0,0,0,0,'Newbie',''); +INSERT INTO `quests` VALUES (213, 'Protection from the sky', 'Testing of require.', '', 0, 0, 0, 0, 0, 'Newbie', ''); +INSERT INTO `quests` VALUES (215, 'Blahu of Boo', 'Test Require Minimum Amount.', '', 0, 0, 0, 0, 0, 'Newbie', ''); +INSERT INTO `quests` VALUES (219, 'MinMax', 'Test Require Minimum Amount.', '', 0, 0, 0, 0, 0, 'Newbie', ''); + + /*!40000 ALTER TABLE `quests` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2014-09-13 18:01:34 UTC (rev 9563) +++ trunk/src/server/questmanager.cpp 2014-09-13 18:03:40 UTC (rev 9564) @@ -680,7 +680,8 @@ } else if(!strncasecmp(block,"possessed", 9) || !strncasecmp(block,"equipped", 8)) { - csStringArray qualityLevels; + csStringArray amountLevels; // min and max quality requested + csStringArray qualityLevels; // min and max quality requested // Check in which case we are of the two, in order to reduce code duplication. bool inventory = !strncasecmp(block,"possessed", 9); @@ -708,16 +709,37 @@ } // If the cut position is bigger than 0 it means there might be something - // before the item name (eg: quality) + // before the item name (eg: quality or amount) if(cutPos != 0) - { + { // Search for the quality identifiers and cut the strings. - csString quality = subcommand.Slice(0, cutPos).Trim(); + csString itemPrefix = subcommand.Slice(0, cutPos).Trim(); subcommand.DeleteAt(0, cutPos).Trim(); + itemPrefix.Downcase(); + + if(!strncasecmp(itemPrefix,"amount", 6)) + { + itemPrefix.DeleteAt(0,6).Trim(); + csString amount = itemPrefix; + + size_t qualityPos = itemPrefix.Find(" "); + if (qualityPos != (size_t) -1) + { + // the quality is prefixed by an amount + amount = itemPrefix.Slice(0, qualityPos).Trim(); + itemPrefix.DeleteAt(0, qualityPos).Trim(); + } + else + { + // no quality after the amount + itemPrefix=""; + } + amountLevels.SplitString(amount, "-", csStringArray::delimSplitEach); + } // Now only the quality is left in the new string, if it's not the // parse might fail but it's an allowed fail. - qualityLevels.SplitString(quality, "-", csStringArray::delimSplitEach); + qualityLevels.SplitString(itemPrefix, "-", csStringArray::delimSplitEach); } //this manages the category argument Require equipped/possessed category xxxx @@ -732,6 +754,17 @@ command.Format("<item inventory=\"%d\" name=\"%s\" ", inventory, itemName.GetData()); } + // possibly append an amount for the items + // if no amount is specified an amount of one item will be sufficent + if(amountLevels.GetSize() > 0) + { + command.AppendFmt("amountmin=\"%s\" ", amountLevels[0]); + if(amountLevels.GetSize() > 1) + { + command.AppendFmt("amountmax=\"%s\" ", amountLevels[1]); + } + } + // Finally append the min and max quality in case these values have been found // a single number will be interpreted as min quality, -value as max quality // value-value as min-max quality. In reality the left part of the - is also This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jo...@us...> - 2014-09-16 22:53:21
|
Revision: 9569 http://sourceforge.net/p/planeshift/code/9569 Author: joelyon Date: 2014-09-16 22:53:09 +0000 (Tue, 16 Sep 2014) Log Message: ----------- fix for PS#6589 - active magic window: base icon display. Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/scripting.cpp trunk/src/server/scripting.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2014-09-16 16:33:32 UTC (rev 9568) +++ trunk/src/server/bulkobjects/psitem.cpp 2014-09-16 22:53:09 UTC (rev 9569) @@ -1408,11 +1408,8 @@ MathEnvironment env; env.Define("Actor", actor); env.Define("Item", this); + script->SetImage(csString(GetImageName())); equipActiveSpell = script->Apply(&env); - if( equipActiveSpell->Image().IsEmpty() ) - { - equipActiveSpell->SetImage( csString(GetImageName()) ); - } equipActiveSpell->SetCancelOnDeath(false); SetActive(true); Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2014-09-16 16:33:32 UTC (rev 9568) +++ trunk/src/server/scripting.cpp 2014-09-16 22:53:09 UTC (rev 9569) @@ -1147,7 +1147,11 @@ script->aim = top->GetAttributeValue("aim"); script->name = name; script->type = type; - script->image = top->GetAttributeValue("image"); + if( top->GetAttributeValue("image")!=NULL ) + { + script->image = top->GetAttributeValue("image"); + } + if(duration) script->duration = MathExpression::Create(duration); Modified: trunk/src/server/scripting.h =================================================================== --- trunk/src/server/scripting.h 2014-09-16 16:33:32 UTC (rev 9568) +++ trunk/src/server/scripting.h 2014-09-16 22:53:09 UTC (rev 9569) @@ -102,6 +102,8 @@ */ const csString &GetDescription(); + void SetImage( csString tImage ) { image=tImage; } + protected: ApplicativeScript(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jo...@us...> - 2014-10-18 01:54:24
|
Revision: 9617 http://sourceforge.net/p/planeshift/code/9617 Author: joelyon Date: 2014-10-18 01:54:16 +0000 (Sat, 18 Oct 2014) Log Message: ----------- corrected an annoying grammatical error Modified Paths: -------------- trunk/src/server/bulkobjects/psspell.h trunk/src/server/database/mysql/sc_npctypes.sql Modified: trunk/src/server/bulkobjects/psspell.h =================================================================== --- trunk/src/server/bulkobjects/psspell.h 2014-10-17 22:25:21 UTC (rev 9616) +++ trunk/src/server/bulkobjects/psspell.h 2014-10-18 01:54:16 UTC (rev 9617) @@ -204,8 +204,8 @@ public: gemActor* caster; ///< Entity who casting this spell gemObject* target; ///< Entity who is target of this spell - Client* client; ///< The client that casted the spell, NULL if superclient - const psSpell* spell; ///< The spell that is casted + Client* client; ///< The client that cast the spell, NULL if superclient + const psSpell* spell; ///< The spell that is cast float max_range; float kFactor; Modified: trunk/src/server/database/mysql/sc_npctypes.sql =================================================================== --- trunk/src/server/database/mysql/sc_npctypes.sql 2014-10-17 22:25:21 UTC (rev 9616) +++ trunk/src/server/database/mysql/sc_npctypes.sql 2014-10-18 01:54:16 UTC (rev 9617) @@ -1366,17 +1366,17 @@ <behavior name="SpellUnknown" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell" target="false" /> + <talk text="$target cast a spell" target="false" /> </behavior> <behavior name="SpellSelf" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell on me" target="false" /> + <talk text="$target cast a spell on me" target="false" /> </behavior> <behavior name="SpellTarget" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell on a target" target="false" /> + <talk text="$target cast a spell on a target" target="false" /> </behavior> <react event="spell:unknown" behavior="SpellUnknown" /> @@ -1397,17 +1397,17 @@ <behavior name="SpellUnknown" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell" target="false" /> + <talk text="$target cast a spell" target="false" /> </behavior> <behavior name="SpellSelf" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell on me" target="false" /> + <talk text="$target cast a spell on me" target="false" /> </behavior> <behavior name="SpellTarget" completion_decay="-1"> <locate obj="perception" /> - <talk text="$target casted a spell on a target" target="false" /> + <talk text="$target cast a spell on a target" target="false" /> </behavior> <react event="spell:unknown" behavior="SpellUnknown" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2015-01-12 08:05:51
|
Revision: 9697 http://sourceforge.net/p/planeshift/code/9697 Author: ralphcampbell Date: 2015-01-12 08:05:44 +0000 (Mon, 12 Jan 2015) Log Message: ----------- The global "dict" was a reference counted pointer to class NPCDialogDict. The single instance of the class was being created and destroyed in multiple places and the reference counting wasn't being used. The fix is to make psServer be responsible for creating and deleting the single instance at the right time and make the other classes fail to initialize if the global "dict" isn't set. Also note that AdminManager creates and holds a pointer to "psNPCDialog* npcdlg" just to make sure that "dict" is initialized. This could be removed since "npcdlg" isn't used by AdminManager. Modified Paths: -------------- trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/dictionary.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/globals.h trunk/src/server/psserver.cpp trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/bulkobjects/dictionary.cpp 2015-01-12 08:05:44 UTC (rev 9697) @@ -75,8 +75,8 @@ #include "adminmanager.h" #include "scripting.h" -// Global variable exposed from globals.h -csRef<NPCDialogDict> dict; +// Global variable exposed from globals.h (set and deleted by psServer) +NPCDialogDict* dict; NPCDialogDict::NPCDialogDict() { Modified: trunk/src/server/bulkobjects/dictionary.h =================================================================== --- trunk/src/server/bulkobjects/dictionary.h 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/bulkobjects/dictionary.h 2015-01-12 08:05:44 UTC (rev 9697) @@ -71,7 +71,7 @@ } }; -class NPCDialogDict : public csRefCount +class NPCDialogDict { protected: typedef csRedBlackTree<NpcTrigger*, CS::Container::DefaultRedBlackTreeAllocator<NpcTrigger*>, NpcTriggerOrdering> NpcTriggerTree; Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2015-01-12 08:05:44 UTC (rev 9697) @@ -122,16 +122,7 @@ this->db = db; if(!dict) - { - dict = new NPCDialogDict; - - if(!dict->Initialize(db)) - { - delete dict; - dict=NULL; - return false; - } - } + return false; return true; } @@ -140,16 +131,9 @@ { randomgen = psserver->rng; this->db = db; - // Initialize base dictionary - if(!dict.IsValid()) - { - dict.AttachNew(new NPCDialogDict()); - if(!dict->Initialize(db)) - { - return false; - } - } + if(!dict) + return false; return LoadKnowledgeAreas(NPCID); } Modified: trunk/src/server/globals.h =================================================================== --- trunk/src/server/globals.h 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/globals.h 2015-01-12 08:05:44 UTC (rev 9697) @@ -30,7 +30,7 @@ extern psServer* psserver; extern iDataConnection* db; -extern csRef<NPCDialogDict> dict; // Defined in dictionary.cpp +extern NPCDialogDict* dict; // Defined in dictionary.cpp #endif Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/psserver.cpp 2015-01-12 08:05:44 UTC (rev 9697) @@ -48,6 +48,7 @@ #include "bulkobjects/pscharacterloader.h" #include "bulkobjects/psitem.h" #include "bulkobjects/psaccountinfo.h" +#include "bulkobjects/dictionary.h" //============================================================================= // Application Includes @@ -196,6 +197,7 @@ delete minigamemanager; delete cachemanager; delete questmanager; + delete dict; delete database; delete logcsv; delete rng; @@ -497,8 +499,15 @@ marriageManager = new psMarriageManager(); + dict = new NPCDialogDict; + if(!dict->Initialize(db)) + { + delete dict; + dict = NULL; + return false; + } + questmanager = new QuestManager(cachemanager); - if(!questmanager->Initialize()) return false; Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2015-01-12 07:56:55 UTC (rev 9696) +++ trunk/src/server/questmanager.cpp 2015-01-12 08:05:44 UTC (rev 9697) @@ -72,25 +72,14 @@ QuestManager::~QuestManager() { - if(dict) - delete dict; } bool QuestManager::Initialize() { if(!dict) - { - dict = new NPCDialogDict; + return false; - if(!dict->Initialize(db)) - { - delete dict; - dict=NULL; - return false; - } - } - return LoadQuestScripts(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2015-03-08 03:48:21
|
Revision: 9729 http://sourceforge.net/p/planeshift/code/9729 Author: ralphcampbell Date: 2015-03-08 03:48:19 +0000 (Sun, 08 Mar 2015) Log Message: ----------- Fix 6791 - The progression script <let ..> statement is unable to read a variable from the VAL ModiferEffect Modified Paths: -------------- trunk/src/server/lootrandomizer.cpp trunk/src/server/scripting.cpp Modified: trunk/src/server/lootrandomizer.cpp =================================================================== --- trunk/src/server/lootrandomizer.cpp 2015-03-08 03:21:32 UTC (rev 9728) +++ trunk/src/server/lootrandomizer.cpp 2015-03-08 03:48:19 UTC (rev 9729) @@ -737,9 +737,8 @@ } } - //if we have any variable defined we add their definition on top of the script. - //By defining each variable in a <let> entry for the script. It will be skipped - //if no variables are defined. + // If we have any variables defined, we add their definitions + // on top of the script. if(!results.IsEmpty()) { scriptXML.AppendFmt("<let vars=\""); @@ -749,12 +748,13 @@ csTuple2<float, csString> entry = it.NextTuple(); scriptXML.AppendFmt("%s = %f;", entry.second.GetData(), entry.first); } - scriptXML.AppendFmt("\" />"); + scriptXML.AppendFmt("\">%s</let></apply>", equip_script.GetData()); } + else + { + scriptXML.AppendFmt("%s</apply>", equip_script.GetData()); + } - //now copy the body of the script containing the equip script from the random loot entries. - scriptXML.AppendFmt("%s</apply>", equip_script.GetData()); - return scriptXML; } Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2015-03-08 03:21:32 UTC (rev 9728) +++ trunk/src/server/scripting.cpp 2015-03-08 03:48:19 UTC (rev 9729) @@ -58,6 +58,8 @@ #include "psserver.h" #include "psproxlist.h" +static bool ParseAOps(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, csPDelArray<AppliedOp>& ops); + /** * \addtogroup xmlscripting * @{ */ @@ -1072,7 +1074,14 @@ class LetAOp : public AppliedOp { public: - LetAOp() : AppliedOp(), bindings(NULL) { } + LetAOp(EntityManager* entitymanager, CacheManager* cachemanager) : + AppliedOp(), + bindings(NULL), + entitymanager(entitymanager), + cachemanager(cachemanager) + { + } + virtual ~LetAOp() { MathScript::Destroy(bindings); @@ -1081,13 +1090,21 @@ bool Load(iDocumentNode* node) { bindings = MathScript::Create("<let> bindings", node->GetAttributeValue("vars")); - return bindings; + return !!bindings && ParseAOps(entitymanager, cachemanager, node, ops); } virtual void Run(MathEnvironment* env, gemActor* target, ActiveSpell* asp) { - bindings->Evaluate(env); + MathEnvironment inner(env); + bindings->Evaluate(&inner); + csPDelArray<AppliedOp>::Iterator it = ops.GetIterator(); + while(it.HasNext()) + { + AppliedOp* op = it.Next(); + op->Run(&inner, target, asp); + } } + virtual const csString GetDescription(MathEnvironment* env) { bindings->Evaluate(env); return ""; @@ -1095,10 +1112,11 @@ protected: MathScript* bindings; /// an embedded MathScript containing new bindings + csPDelArray<AppliedOp> ops; + EntityManager* entitymanager; + CacheManager* cachemanager; }; -static bool ParseAOps(EntityManager* entitymanager, CacheManager* cachemanager, iDocumentNode* top, csPDelArray<AppliedOp>& ops); - /** * IfAOp - a way to evaluate MathScript stuff and create new bindings: * @@ -1257,7 +1275,7 @@ { csRef<iDocumentNode> node = it->Next(); - if(node->GetType() != CS_NODE_ELEMENT) // not sure if this is really necessary... + if(node->GetType() != CS_NODE_ELEMENT) continue; csString elem = node->GetValue(); @@ -1341,7 +1359,7 @@ } else if(elem == "let") { - op = new LetAOp; + op = new LetAOp(entitymanager, cachemanager); } else if(elem == "if") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2015-05-03 14:11:48
|
Revision: 9739 http://sourceforge.net/p/planeshift/code/9739 Author: lpancallo Date: 2015-05-03 14:11:46 +0000 (Sun, 03 May 2015) Log Message: ----------- Updated to 1280 db version Modified Paths: -------------- trunk/src/server/database/mysql/server_options.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/psserver.cpp Modified: trunk/src/server/database/mysql/server_options.sql =================================================================== --- trunk/src/server/database/mysql/server_options.sql 2015-03-17 05:46:17 UTC (rev 9738) +++ trunk/src/server/database/mysql/server_options.sql 2015-05-03 14:11:46 UTC (rev 9739) @@ -29,7 +29,7 @@ # Dumping data for table server_options # -INSERT INTO `server_options` VALUES ('db_version','1279'); +INSERT INTO `server_options` VALUES ('db_version','1280'); INSERT INTO `server_options` VALUES ('game_time','15:00'); INSERT INTO `server_options` VALUES ('game_date','100-1-1'); INSERT INTO `server_options` VALUES ('instruments_category','27'); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2015-03-17 05:46:17 UTC (rev 9738) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2015-05-03 14:11:46 UTC (rev 9739) @@ -1870,6 +1870,17 @@ INSERT INTO command_group_assignment VALUES( "/version", 10 ); UPDATE `server_options` SET `option_value`='1279' WHERE `option_name`='db_version'; + +# +# Added new fields for OS version +# +ALTER TABLE accounts ADD COLUMN `OS` char(1) DEFAULT NULL AFTER operating_system; +ALTER TABLE accounts ADD COLUMN `OS_ver_major` int(2) NOT NULL DEFAULT '0' AFTER OS; +ALTER TABLE accounts ADD COLUMN `OS_ver_minor` int(2) NOT NULL DEFAULT '0' AFTER OS_ver_major; +ALTER TABLE accounts ADD COLUMN `OS_platform` char(14) DEFAULT NULL AFTER OS_ver_minor; +ALTER TABLE accounts ADD COLUMN `Machine_type` char(6) DEFAULT NULL AFTER OS_platform; +UPDATE `server_options` SET `option_value`='1280' WHERE `option_name`='db_version'; + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2015-03-17 05:46:17 UTC (rev 9738) +++ trunk/src/server/psserver.cpp 2015-05-03 14:11:46 UTC (rev 9739) @@ -95,7 +95,7 @@ #include "workmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1279" +#define DATABASE_VERSION_STR "1280" psCharacterLoader psServer::CharacterLoader; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2015-06-06 23:29:07
|
Revision: 9740 http://sourceforge.net/p/planeshift/code/9740 Author: ralphcampbell Date: 2015-06-06 23:29:04 +0000 (Sat, 06 Jun 2015) Log Message: ----------- 6456 - Add ability to identify NPC in a quest script by PID Modified Paths: -------------- trunk/src/server/bulkobjects/pscharquestmgr.cpp trunk/src/server/bulkobjects/pscharquestmgr.h trunk/src/server/bulkobjects/psnpcdialog.cpp trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h trunk/src/server/gem.cpp trunk/src/server/questmanager.cpp Modified: trunk/src/server/bulkobjects/pscharquestmgr.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharquestmgr.cpp 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/bulkobjects/pscharquestmgr.cpp 2015-06-06 23:29:04 UTC (rev 9740) @@ -202,7 +202,7 @@ q->assigner_id = assigner_id; //set last response to current response only if this is the top parent q->last_response = quest->GetParentQuest() ? -1 : owner->GetLastResponse(); //This should be the response given when starting this quest - q->completionOrder = 0; //this rappresents the default. + q->completionOrder = 0; //this represents the default. // assign any skipped parent quests if(quest->GetParentQuest() && !IsQuestAssigned(quest->GetParentQuest()->GetID())) @@ -222,7 +222,7 @@ q->GetQuest()->SetQuestLastActivatedTime(csGetTicks() / 1000); - Debug3(LOG_QUESTS, owner->GetPID().Unbox(), "Assigned quest '%s' to player '%s'\n", quest->GetName(), owner->GetCharName()); + Debug4(LOG_QUESTS, owner->GetPID().Unbox(), "Assigned quest '%s' to player '%s' by %u\n", quest->GetName(), owner->GetCharName(), assigner_id.Unbox()); UpdateQuestAssignments(); } else @@ -606,7 +606,7 @@ return false; } - // Sanity check to see if time for completion is withing + // Sanity check to see if time for completion is within // lockout time. if(q->lockout_end > age + q->GetQuest()->GetPlayerLockoutTime()) q->lockout_end = age + q->GetQuest()->GetPlayerLockoutTime(); Modified: trunk/src/server/bulkobjects/pscharquestmgr.h =================================================================== --- trunk/src/server/bulkobjects/pscharquestmgr.h 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/bulkobjects/pscharquestmgr.h 2015-06-06 23:29:04 UTC (rev 9740) @@ -96,7 +96,7 @@ /** Setup this manager for a character. * - * @param owner The characther that this quest manager is for. + * @param owner The character that this quest manager is for. */ void Initialize(psCharacter* owner); Modified: trunk/src/server/bulkobjects/psnpcdialog.cpp =================================================================== --- trunk/src/server/bulkobjects/psnpcdialog.cpp 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/bulkobjects/psnpcdialog.cpp 2015-06-06 23:29:04 UTC (rev 9740) @@ -155,8 +155,8 @@ KnowledgeArea* newarea = new KnowledgeArea; // Downcase KA area before inserting into tree - csString area = result[i]["area"]; - newarea->area = area.Downcase(); + newarea->area = result[i]["area"]; + newarea->area.Downcase(); newarea->priority = result[i].GetInt("priority"); @@ -347,7 +347,7 @@ } if(resp) - break; + return resp; } if(!resp) //else, try old way with general last response { Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/chatmanager.cpp 2015-06-06 23:29:04 UTC (rev 9740) @@ -246,7 +246,7 @@ // The NPC is spoken to so register this client as a speaker targetnpc->RegisterSpeaker(client); - NpcResponse* resp = CheckNPCResponse(msg,client,targetnpc); + NpcResponse* resp = CheckNPCEvent(client, msg.sText, targetnpc); if(resp) { csTicks delay = resp->ExecuteScript(client->GetActor(), targetnpc); @@ -671,11 +671,6 @@ return NULL; } -NpcResponse* ChatManager::CheckNPCResponse(psChatMessage &msg,Client* client,gemNPC* &target) -{ - return CheckNPCEvent(client,msg.sText,target); // <L MONEY="0,0,0,3"></L> -} - void ChatManager::SendMultipleAudioFileHashes(Client* client, const char* voiceFiles) { if(!voiceFiles || voiceFiles[0]==0) Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/chatmanager.h 2015-06-06 23:29:04 UTC (rev 9740) @@ -106,8 +106,6 @@ void SendGroup(Client* client, psChatMessage &msg); void SendShout(Client* client, psChatMessage &msg); - NpcResponse* CheckNPCResponse(psChatMessage &msg,Client* client,gemNPC* &target); - /// Starts the process of sending the specified file to the client void SendAudioFileHash(Client* client, const char* voiceFile, csTicks delay); /// Sends the actual file to the client if needed Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/gem.cpp 2015-06-06 23:29:04 UTC (rev 9740) @@ -4822,6 +4822,14 @@ { menu.Add(npcmenu); } + // Check to see if any responses exist by PID instead of 'name'. + csString pid_name; + pid_name.Format("%u", pid.Unbox()); + npcmenu = dict->FindMenu(pid_name); + if(npcmenu) + { + menu.Add(npcmenu); + } if(menu.triggers.GetSize()) { Modified: trunk/src/server/questmanager.cpp =================================================================== --- trunk/src/server/questmanager.cpp 2015-05-03 14:11:46 UTC (rev 9739) +++ trunk/src/server/questmanager.cpp 2015-06-06 23:29:04 UTC (rev 9740) @@ -112,7 +112,7 @@ return false; } } - // Second pars the scripts, both quests and KAs. + // Second parse the scripts, both quests and KAs. for(i=0; i<count; i++) { int id = quests[i].GetInt("quest_id"); @@ -218,7 +218,7 @@ if(quest_assigned_already) { // If quest has been assigned in the script, we need to have every response - // verify that the quest have been assigned. + // verify that the quest has been assigned. op.AppendFmt("<assigned quest=\"%s\" />", mainQuest->GetName()); } else @@ -976,7 +976,7 @@ { GetNextScriptLine(scr,block,start,line_number); - Debug2(LOG_QUESTS, 0, "Parsing line %s", block.GetData()); + Debug3(LOG_QUESTS, 0, "Parsing line %d:%s", line_number, block.GetData()); // now we have the block to do something with @@ -1369,7 +1369,8 @@ // First check single name: "Player gives Sharven ..." csString first = words.Get(2); - select.Format("SELECT * from characters where name='%s' and lastname='' and npc_master_id!=0",first.GetData()); + select.Format("SELECT * from characters where %s='%s' and lastname='' and npc_master_id!=0", + isdigit(first[0]) ? "id" : "name", first.GetData()); // check if NPC exists Result npc_db(db->Select(select)); if(npc_db.IsValid() && npc_db.Count()>0) @@ -1377,7 +1378,7 @@ current_npc = first; return 1; } - else // Than check double name: "Player gives Menlil Toresun ..." + else // Then check double name: "Player gives Menlil Toresun ..." { csString last = words.Get(3); @@ -1656,7 +1657,16 @@ { // Now that this npc has a trigger associated, we need to make sure it has a KA for itself. // These have been added manually in the past, but we will do it here automatically now. - gemNPC* npc = dynamic_cast<gemNPC*>(psserver->entitymanager->GetGEM()->FindObject(current_npc)); + gemNPC* npc; + if(isdigit(current_npc[0])) + { + PID npc_id((uint32_t)strtol(current_npc.GetData(), NULL, 10)); + npc = psserver->entitymanager->GetGEM()->FindNPCEntity(npc_id); + } + else + { + npc = dynamic_cast<gemNPC*>(psserver->entitymanager->GetGEM()->FindObject(current_npc)); + } if(npc) // specific KA named here { // First check for no dialog at all on this npc, and create it if needed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2016-02-20 18:34:28
|
Revision: 9787 http://sourceforge.net/p/planeshift/code/9787 Author: lpancallo Date: 2016-02-20 18:34:26 +0000 (Sat, 20 Feb 2016) Log Message: ----------- Added example of variable used in loot modifiers equip scripts Added description for variable Modified Paths: -------------- trunk/src/server/database/mysql/loot_modifiers.sql trunk/src/server/scripting.cpp Modified: trunk/src/server/database/mysql/loot_modifiers.sql =================================================================== --- trunk/src/server/database/mysql/loot_modifiers.sql 2016-02-20 14:12:35 UTC (rev 9786) +++ trunk/src/server/database/mysql/loot_modifiers.sql 2016-02-20 18:34:26 UTC (rev 9787) @@ -21,7 +21,7 @@ -- Prefixes INSERT INTO loot_modifiers VALUES (1,'prefix','Plastic','<ModiferEffect operation="mul" name="item.damage" value="0.90" />',94,'<StatReq name="INT" value="100"/><StatReq name="STR" value="70"/>',0.7,'','','','<str value="10"/><hp-max value="10"/>'); INSERT INTO loot_modifiers VALUES (2,'prefix','Fabric','<ModiferEffect operation="add" name="item.damage" value="5" />',99,'<StatReq name="STR" value="100"/>',1.2,'','','','<str value="10"/><hp-max value="10"/>'); -INSERT INTO loot_modifiers VALUES (3,'prefix','Plutonium','<ModiferEffect operation="add" name="item.damage" value="4" />',124,'<StatReq name="STR" value="200"/>',1.2,'','','','<str value="10"/><hp-max value="10"/>'); +INSERT INTO loot_modifiers VALUES (3,'prefix','Plutonium','<ModiferEffect operation="VAL" name="var.Attack" value="1.6" />',124,'<StatReq name="STR" value="200"/>',1.2,'','','','<atk value="Attack" />'); -- Adjectives INSERT INTO loot_modifiers VALUES (4,'adjective','Torn','<ModiferEffect operation="mul" name="item.damage" value="0.30" />',4,'<StatReq name="STR" value="200"/>',0.2,'','','','<str value="10"/><hp-max value="10"/>'); Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-02-20 14:12:35 UTC (rev 9786) +++ trunk/src/server/scripting.cpp 2016-02-20 18:34:26 UTC (rev 9787) @@ -1106,8 +1106,15 @@ } virtual const csString GetDescription(MathEnvironment* env) { - bindings->Evaluate(env); - return ""; + csString descr; + bindings->Evaluate(env); + csPDelArray<AppliedOp>::Iterator it = ops.GetIterator(); + while(it.HasNext()) + { + AppliedOp* op = it.Next(); + descr.Append(op->GetDescription(env)); + } + return descr; } protected: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2016-02-21 00:22:20
|
Revision: 9789 http://sourceforge.net/p/planeshift/code/9789 Author: lpancallo Date: 2016-02-21 00:22:17 +0000 (Sun, 21 Feb 2016) Log Message: ----------- added number of progression point gained to message fixed uninitialized variable Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/progressionmanager.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2016-02-20 22:32:52 UTC (rev 9788) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2016-02-21 00:22:17 UTC (rev 9789) @@ -2973,14 +2973,15 @@ { z+=amount; rankup = CheckDoRank(user); - if(rankup) + /*if(rankup) { actuallyAdded = -zCost; } else { actuallyAdded = amount; - } + }*/ + actuallyAdded = amount; } else { @@ -3369,7 +3370,7 @@ int SkillSet::AddSkillPractice(psSkillInfo* skillInfo, unsigned int val) { - unsigned int added; + unsigned int added = 0; bool rankUp; csString name; Modified: trunk/src/server/progressionmanager.cpp =================================================================== --- trunk/src/server/progressionmanager.cpp 2016-02-20 22:32:52 UTC (rev 9788) +++ trunk/src/server/progressionmanager.cpp 2016-02-21 00:22:17 UTC (rev 9789) @@ -137,7 +137,7 @@ psZPointsGainedEvent evt(me); csString string; - string.Format("You've gained some practice points in %s.", evt.skillName.GetData()); + string.Format("You've gained %d practice points in %s.", evt.amountGained, evt.skillName.GetData()); psserver->SendSystemInfo(evt.actor->GetClientID(), string); if(evt.rankUp) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-03 14:33:54
|
Revision: 9888 http://sourceforge.net/p/planeshift/code/9888 Author: ravna-ps Date: 2016-04-03 14:33:51 +0000 (Sun, 03 Apr 2016) Log Message: ----------- Fixed bug #6836 and #6847 Item descriptions can now properly use math environments to evaluate variables defined in the item itself (like Item:Skill1). Item descriptions do no longer show lines where a skill-buff is 0 (like "Sword: 0). Modified Paths: -------------- trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/scripting.cpp trunk/src/server/scripting.h Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2016-04-02 15:48:58 UTC (rev 9887) +++ trunk/src/server/bulkobjects/psitem.cpp 2016-04-03 14:33:51 UTC (rev 9888) @@ -1437,7 +1437,10 @@ if(!script) return ""; - return script->GetDescription(); + MathEnvironment env; + env.Define("Item", this); + + return script->GetDescription(&env); } bool psItem::CheckStackableWith(const psItem* otheritem, bool precise, bool checkStackCount, bool checkWorld) const Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-02 15:48:58 UTC (rev 9887) +++ trunk/src/server/scripting.cpp 2016-04-03 14:33:51 UTC (rev 9888) @@ -411,6 +411,11 @@ csString descr = skillname; int val = (int)value->Evaluate(env); + // This prevents lines like "Sword: 0" from showing up in item descriptions. They can be caused by mathscripts like: <skill name="Sword" value="if(Item:Skill1 = 0,10,0)"/> + if (val == 0) + { + return ""; + } descr.AppendFmt(": %d\n",val); return descr; } @@ -1448,18 +1453,16 @@ return asp; } -const csString &ApplicativeScript::GetDescription() +const csString &ApplicativeScript::GetDescription(MathEnvironment* env) { if(!description.IsEmpty()) return description; - - MathEnvironment env; csPDelArray<AppliedOp>::Iterator it = ops.GetIterator(); while(it.HasNext()) { AppliedOp* op = it.Next(); - description += op->GetDescription(&env); + description += op->GetDescription(env); } return description; Modified: trunk/src/server/scripting.h =================================================================== --- trunk/src/server/scripting.h 2016-04-02 15:48:58 UTC (rev 9887) +++ trunk/src/server/scripting.h 2016-04-03 14:33:51 UTC (rev 9888) @@ -190,7 +190,7 @@ * retrieve the description of the Applicativescripts commands * @return csString containing a description of the scripts effect */ - const csString &GetDescription(); + const csString &GetDescription(MathEnvironment* env); void SetImage( csString tImage ) { image=tImage; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-22 14:56:19
|
Revision: 9902 http://sourceforge.net/p/planeshift/code/9902 Author: ravna-ps Date: 2016-04-22 14:56:16 +0000 (Fri, 22 Apr 2016) Log Message: ----------- Changed a few server errors to be debug messages (they are expected to show up during normal operation and don't break anything, thus they are not errors). Modified Paths: -------------- trunk/src/server/cachemanager.cpp trunk/src/server/workmanager.cpp Modified: trunk/src/server/cachemanager.cpp =================================================================== --- trunk/src/server/cachemanager.cpp 2016-04-21 21:06:34 UTC (rev 9901) +++ trunk/src/server/cachemanager.cpp 2016-04-22 14:56:16 UTC (rev 9902) @@ -1386,7 +1386,7 @@ transHash = tradeTransformations_IDHash.Get(patternid,NULL); if(!transHash) { - Error2("No data in trade_transformations for pattern %d", patternid); + Debug2(LOG_TRADE, 0, "No data in trade_transformations for pattern %d", patternid); return NULL; } @@ -1394,7 +1394,7 @@ csPDelArray<psTradeTransformations>* transArray = transHash->Get(targetid,NULL); if(!transArray) { - Error2("No data in trade_transformations array for item %d", targetid); + Debug2(LOG_TRADE, 0, "No data in trade_transformations array for item %d", targetid); return NULL; } Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2016-04-21 21:06:34 UTC (rev 9901) +++ trunk/src/server/workmanager.cpp 2016-04-22 14:56:16 UTC (rev 9902) @@ -2242,7 +2242,8 @@ psWorkGameEvent* oldEvent = item->GetTransformationEvent(); if(oldEvent) { - Error1("Had to kill old event in StartTransformationEvent."); + // log it in case it proves to be relevant to some bug. + Debug1(LOG_TRADE, 0, "Had to kill old event in StartTransformationEvent."); item->SetTransformationEvent(NULL); oldEvent->Interrupt(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-23 15:11:49
|
Revision: 9905 http://sourceforge.net/p/planeshift/code/9905 Author: ravna-ps Date: 2016-04-23 15:11:47 +0000 (Sat, 23 Apr 2016) Log Message: ----------- Changed combinations: you can now use 0 as min and max quantity of source items to have them become wild cards. If 1 source is 0, all must be, also, all must be min=max qty. Changed combinations: you can now use 0 as result qty to become a wild card. Source items in this case must be min=max qty. When combining, the user must provide source items in stacks, and stack size must be an exact match to "multiplier" * source item qty. Modified Paths: -------------- trunk/src/server/workmanager.cpp trunk/src/server/workmanager.h Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2016-04-22 17:15:02 UTC (rev 9904) +++ trunk/src/server/workmanager.cpp 2016-04-23 15:11:47 UTC (rev 9905) @@ -1712,6 +1712,8 @@ // Go through all of the combinations looking for exact match resultId = 0; resultQty = 0; + uint32 tempId = 0; + int tempQty = 0; // Check all the possible combination in this data set for(size_t u = 0; u < combArray.GetSize(); u++) @@ -1719,11 +1721,18 @@ if(secure) psserver->SendSystemInfo(clientNum,"Checking combinations for patterns."); for(size_t i=0; i<combArray.Get(u)->GetSize(); i++) { + int multiplier = 0; // Check for matching lists CombinationConstruction* current = combArray.Get(u)->Get(i); if(secure) psserver->SendSystemInfo(clientNum,"Checking combinations for result id %u quantity %d.", current->resultItem, current->resultQuantity); - if(MatchCombinations(itemArray,current)) + if(MatchCombinations(itemArray,current,multiplier)) { + if (multiplier) + { + tempId = current->resultItem; + tempQty = (current->resultQuantity ? current->resultQuantity * multiplier : multiplier); + continue; + } resultId = current->resultItem; resultQty = current->resultQuantity; if(secure) psserver->SendSystemInfo(clientNum,"Found matching combination."); @@ -1731,6 +1740,13 @@ } } } + if (tempId) + { + resultId = tempId; + resultQty = tempQty; + if (secure) psserver->SendSystemInfo(clientNum, "Found matching multiplier combination."); + return true; + } // Check all the possible combination in this data set for(size_t u = 0; u < combGroupArray.GetSize(); u++) @@ -1738,11 +1754,18 @@ if(secure) psserver->SendSystemInfo(clientNum,"Checking combinations for group patterns."); for(size_t i=0; i<combGroupArray.Get(u)->GetSize(); i++) { + int multiplier = 0; // Check for matching lists CombinationConstruction* current = combGroupArray.Get(u)->Get(i); if(secure) psserver->SendSystemInfo(clientNum,"Checking combinations for result id %u quantity %d.", current->resultItem, current->resultQuantity); - if(MatchCombinations(itemArray,current)) + if(MatchCombinations(itemArray,current,multiplier)) { + if (multiplier) + { + tempId = current->resultItem; + tempQty = (current->resultQuantity ? current->resultQuantity * multiplier : multiplier); + continue; + } resultId = current->resultItem; resultQty = current->resultQuantity; if(secure) psserver->SendSystemInfo(clientNum,"Found matching group combination."); @@ -1750,6 +1773,13 @@ } } } + if (tempId) + { + resultId = tempId; + resultQty = tempQty; + if (secure) psserver->SendSystemInfo(clientNum, "Found matching multiplier group combination."); + return true; + } // Check all the possible combination in patternless data set for (size_t u = 0; u < patternlessArray.GetSize(); u++) @@ -1757,11 +1787,18 @@ if (secure) psserver->SendSystemInfo(clientNum, "Checking combinations for patternless."); for (size_t i = 0; i<patternlessArray.Get(u)->GetSize(); i++) { + int multiplier = 0; // Check for matching lists CombinationConstruction* current = patternlessArray.Get(u)->Get(i); if (secure) psserver->SendSystemInfo(clientNum, "Checking combinations for result id %u quantity %d.", current->resultItem, current->resultQuantity); - if (MatchCombinations(itemArray, current)) + if (MatchCombinations(itemArray, current,multiplier)) { + if (multiplier) + { + tempId = current->resultItem; + tempQty = (current->resultQuantity ? current->resultQuantity * multiplier : multiplier); + continue; + } resultId = current->resultItem; resultQty = current->resultQuantity; if (secure) psserver->SendSystemInfo(clientNum, "Found matching patternless combination."); @@ -1769,6 +1806,13 @@ } } } + if (tempId) + { + resultId = tempId; + resultQty = tempQty; + if (secure) psserver->SendSystemInfo(clientNum, "Found matching multiplier patternless combination."); + return true; + } } else { @@ -1843,7 +1887,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Checks for matching combination list to item array -bool WorkManager::MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current) +bool WorkManager::MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current, int &multiplier) { // If the items count match then this is a possible valid combination. if(itemArray.GetSize() == current->combinations.GetSize()) @@ -1852,12 +1896,36 @@ csArray<psItem*> itemsMatched; csArray<psItem*> itemsLeft = itemArray; + // should be unable to get empty combinations, and this function should not be called without any items being present either, so using [0] "should" be safe. + // set up the multiplier if minqty=maxqty=0. + if (current->combinations[0]->GetMinQty() == 0 && current->combinations[0]->GetMinQty() == current->combinations[0]->GetMaxQty()) + { + multiplier = itemArray[0]->GetStackCount(); + } + // set up the multiplier if result = 0 and min/max qty are identical and stack count is an exact multiple of min qty (all input stacks need to be in the same multiple, but we'll check that later. + else if (current->combinations[0]->GetResultQty() == 0 && current->combinations[0]->GetMinQty() == current->combinations[0]->GetMaxQty() && + itemArray[0]->GetStackCount() % current->combinations[0]->GetMinQty() == 0) + { + multiplier = itemArray[0]->GetStackCount() / current->combinations[0]->GetMinQty(); + } + + // Iterate over the items in the construction set looking for matches. for(size_t j = 0; j < current->combinations.GetSize(); j++) { uint32 combId = current->combinations[j]->GetItemId(); int combMinQty = current->combinations[j]->GetMinQty(); int combMaxQty = current->combinations[j]->GetMaxQty(); + if (multiplier && combMinQty != combMaxQty) + { + break; // we only allow multipliers to be used when all input of the combination has min=max qty. + } + if (multiplier) + { + // we just determined they're identical, so we can use either one. We change these for the stack check coming up, if stacks are in different multiples, + //the first different will fail the stack check. + combMinQty = combMaxQty = (combMinQty == 0 ? multiplier : combMinQty * multiplier); + } // Iterate again over all items left in match set. for(size_t z = 0; z < itemsLeft.GetSize(); z++) Modified: trunk/src/server/workmanager.h =================================================================== --- trunk/src/server/workmanager.h 2016-04-22 17:15:02 UTC (rev 9904) +++ trunk/src/server/workmanager.h 2016-04-23 15:11:47 UTC (rev 9905) @@ -478,10 +478,11 @@ * * @param itemArray The array of items that need to be checked. * @param current The combination structure that includes an array of items + * @param multiplier this value will tell how many times this combination is run * * @return False if combination is not possible. */ - bool MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current); + bool MatchCombinations(csArray<psItem*> itemArray, CombinationConstruction* current, int &multiplier); /** * Check to see if there is a possible trasnform available. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-04-24 21:57:47
|
Revision: 9906 http://sourceforge.net/p/planeshift/code/9906 Author: ravna-ps Date: 2016-04-24 21:57:46 +0000 (Sun, 24 Apr 2016) Log Message: ----------- Fixed 2 things gcc did not like. Modified Paths: -------------- trunk/src/server/scripting.cpp trunk/src/server/usermanager.h Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-04-23 15:11:47 UTC (rev 9905) +++ trunk/src/server/scripting.cpp 2016-04-24 21:57:46 UTC (rev 9906) @@ -41,7 +41,7 @@ #include "rpgrules/factions.h" #include "bulkobjects/pstrait.h" #include "bulkobjects/activespell.h" -#include "bulkobjects/psRaceInfo.h" +#include "bulkobjects/psraceinfo.h" //============================================================================= // Application Includes Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2016-04-23 15:11:47 UTC (rev 9905) +++ trunk/src/server/usermanager.h 2016-04-24 21:57:46 UTC (rev 9906) @@ -228,7 +228,7 @@ * This function will start an animation on the actor, it will not repeat, so if you need an animation * loop, just call it repeatedly from a script. */ - bool UserManager::Animation(csString animation, gemActor* actor); + bool Animation(csString animation, gemActor* actor); /** * Handles the /mount command This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-05-08 12:08:41
|
Revision: 9930 http://sourceforge.net/p/planeshift/code/9930 Author: ravna-ps Date: 2016-05-08 12:08:39 +0000 (Sun, 08 May 2016) Log Message: ----------- New feature: Gameboards now automatically reset when no one is playing them. Modified Paths: -------------- trunk/src/server/bulkobjects/psminigameboard.cpp trunk/src/server/minigamemanager.cpp Modified: trunk/src/server/bulkobjects/psminigameboard.cpp =================================================================== --- trunk/src/server/bulkobjects/psminigameboard.cpp 2016-05-08 09:52:52 UTC (rev 9929) +++ trunk/src/server/bulkobjects/psminigameboard.cpp 2016-05-08 12:08:39 UTC (rev 9930) @@ -473,10 +473,13 @@ if(layout) delete[] layout; - gameBoardDef = newGameDef; + if (newGameDef) + gameBoardDef = newGameDef; + if (!gameBoardDef) + return; // if it was called with a NULL board, and none has been set before, proceeding will crash us. + layout = new uint8_t[gameBoardDef->layoutSize]; - if(!preparedLayout) memcpy(layout, gameBoardDef->layout, gameBoardDef->layoutSize); else Modified: trunk/src/server/minigamemanager.cpp =================================================================== --- trunk/src/server/minigamemanager.cpp 2016-05-08 09:52:52 UTC (rev 9929) +++ trunk/src/server/minigamemanager.cpp 2016-05-08 12:08:39 UTC (rev 9930) @@ -628,7 +628,8 @@ void psMiniGameSession::Restart() { - + // setting up the board without a definition or layout will reset it (if it was initialised before). + gameBoard.Setup(NULL, NULL); } void psMiniGameSession::AddPlayer(Client* client) @@ -733,6 +734,14 @@ p->playerName = NULL; playerCount--; playerRemoved = true; + if (playerCount == 0) + { + Restart(); + psSystemMessage resetMsg = psSystemMessage(clientID, MSG_INFO, "The board '%s' was reset because no one was %s it.", + name.GetData(), (minigameStyle == MG_GAME ? "playing" : "solving")); + resetMsg.Multicast(client->GetActor()->GetMulticastClients(), 0, CHAT_SAY_RANGE); + Broadcast(); // show any watchers the new board layout. + } delete newmsg; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2016-12-07 16:07:31
|
Revision: 9967 http://sourceforge.net/p/planeshift/code/9967 Author: ravna-ps Date: 2016-12-07 16:07:30 +0000 (Wed, 07 Dec 2016) Log Message: ----------- fixed: the <item> tag in progression events can now use variables/math expressions in the randomlevel and randomcost variables. added: the <item> tag can now take an itemquality variable (int). This can be a variable/math expression too. added: the <item> tag can now take prefixid, suffixid and adjectiveid as parameters (ints), which are applied to the created item (after random modifiers if any, overwriting them as applicable). fixed: removed an old debug statement in lootrandomizer Modified Paths: -------------- trunk/src/server/lootrandomizer.cpp trunk/src/server/scripting.cpp Modified: trunk/src/server/lootrandomizer.cpp =================================================================== --- trunk/src/server/lootrandomizer.cpp 2016-12-06 16:49:39 UTC (rev 9966) +++ trunk/src/server/lootrandomizer.cpp 2016-12-07 16:07:30 UTC (rev 9967) @@ -314,7 +314,6 @@ continue; } - printf("found\n"); item->AddLootModifier(lootModifier->id, lootModifier->mod_id); found = true; } Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2016-12-06 16:49:39 UTC (rev 9966) +++ trunk/src/server/scripting.cpp 2016-12-07 16:07:30 UTC (rev 9967) @@ -3383,6 +3383,12 @@ * @code * <item aim="Target" name="Tria" location="inventory" count="5" /> * @endcode + * Optional parameters in the item tag are: + * itemquality (can be an int or an expression), randomize (boolean), randomlevel (int or expression, appears to get ignored by LootRandomizer::RandomizeItem -dec-2016), randomcost (int or expression) + * Notice randomize is required to be true before the other 2 take effect. + * adjectiveid, suffixid and prefixid (ints) are used to give specific modifiers to specific slots, these are ignored if they are not valid for the item + * but are still applied if the id does not match the slot (a suffixid containing the id of a prefix, etc), though only the last one to land in that slot will be saved. + * Finally, they overwrite the randomly given modifiers in slots of the same type. (if any) */ class ItemOp : public ImperativeAim { @@ -3413,10 +3419,16 @@ } placeOnGround = location == "ground"; - //loads data about the randomization status of the item. + //loads optional data about the randomization status of the item. randomize = node->GetAttributeValueAsBool("randomize"); - randomCost = node->GetAttributeValueAsInt("randomcost", 1000); - randomLevel = node->GetAttributeValueAsInt("randomlevel", 3); + randomCostExpr = MathExpression::Create(node->GetAttributeValue("randomcost", "1000")); + randomLevelExpr = MathExpression::Create(node->GetAttributeValue("randomlevel", "3")); + // load optional quality + itemQualityExpr = MathExpression::Create(node->GetAttributeValue("itemquality", "0")); + // load optional modifiers + adjectiveIdExpr = MathExpression::Create(node->GetAttributeValue("adjectiveid", "0")); + suffixIdExpr = MathExpression::Create(node->GetAttributeValue("suffixid", "0")); + prefixIdExpr = MathExpression::Create(node->GetAttributeValue("prefixid", "0")); return !name.IsEmpty() && count && ImperativeAim::Load(node); } @@ -3428,12 +3440,21 @@ Error2("Error while executing ItemOp script giving item %s, invalid target character",name.GetData()); return; } + int stackCount = count->Evaluate(env); if(stackCount <= 0) { return; } + // evaluate the following vars to see if they contained math-scripts and/or variables. + randomLevel = randomLevelExpr->Evaluate(env); + randomCost = randomCostExpr->Evaluate(env); + itemQuality = itemQualityExpr->Evaluate(env); + suffixId = suffixIdExpr->Evaluate(env); + prefixId = prefixIdExpr->Evaluate(env); + adjectiveId = adjectiveIdExpr->Evaluate(env); + if(placeOnGround) { psItem* iteminstance = CreateItem(true, stackCount); @@ -3499,10 +3520,24 @@ item->SetStackCount(stackCount); } - //if we have to randomize the item we do it now. - if(randomize) - cacheManager->RandomizeItem(item, randomCost, randomLevel); + if (randomize) + { + cacheManager->RandomizeItem(item, randomCost, randomLevel); + } + if (itemQuality) + { + item->SetItemQuality(itemQuality); + } + if (suffixId || prefixId || adjectiveId) + { + // adding a modifier with ID 0 will be ignored, so we can safely add all 3. + csArray<uint32_t> modsToAdd; + modsToAdd.Push(suffixId); + modsToAdd.Push(prefixId); + modsToAdd.Push(adjectiveId); + cacheManager->getLootRandomizer()->SetModifiers(item, modsToAdd); + } item->SetLoaded(); // Item is fully created @@ -3512,8 +3547,18 @@ protected: csString name; bool randomize; ///< If true it will randomize the item upon creation. - int randomCost; ///< The maximum allowed cost for the item. - int randomLevel; ///< The amount of modifiers allowed + MathExpression* randomCostExpr; ///< The maximum allowed cost for the item. + MathExpression* randomLevelExpr; ///< The amount of modifiers allowed + MathExpression* itemQualityExpr; ///< specify item quality. + MathExpression* prefixIdExpr; ///< If given, use this specific ID instead of the random one (if any, if none, just apply this). + MathExpression* suffixIdExpr; ///< If given, use this specific ID instead of the random one (if any, if none, just apply this). + MathExpression* adjectiveIdExpr; ///< If given, use this specific ID instead of the random one (if any, if none, just apply this). + int randomLevel; + int randomCost; + int itemQuality; + int suffixId; + int prefixId; + int adjectiveId; MathExpression* count; bool placeOnGround; CacheManager* cacheManager; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-03-05 09:05:26
|
Revision: 10000 http://sourceforge.net/p/planeshift/code/10000 Author: lpancallo Date: 2018-03-05 09:05:22 +0000 (Mon, 05 Mar 2018) Log Message: ----------- Added comments to the code while analyzing it. Modified Paths: -------------- trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h trunk/src/server/client.h trunk/src/server/gem.h trunk/src/server/msgmanager.cpp trunk/src/server/msgmanager.h Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/chatmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) @@ -265,6 +265,7 @@ } case CHAT_TELL: { + // the name of the target player should not be empty if(msg.sPerson.Length() == 0) { psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); @@ -271,6 +272,7 @@ break; } + // Search a player object from its name Client* target = FindPlayerClient(msg.sPerson); if(target && !target->IsSuperClient()) { Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/chatmanager.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -80,6 +80,8 @@ void HandleChannelLeaveMessage(MsgEntry* me, Client* client); void SendNotice(psChatMessage &msg); + + // Used from server console to send messages to all players, example /say Server is getting updated, be patient. void SendServerChannelMessage(psChatMessage &msg, uint32_t channelID); NpcResponse* CheckNPCEvent(Client* client,csString &trigger,gemNPC* &target); @@ -117,7 +119,10 @@ // Chat channel state // uint32_t here to allow hashing // csHashReversible is not used because it does not allow a many to many mapping + // values are : clientNumber, channelID csHash<uint32_t, uint32_t> channelSubscriptions; + + // values are : channelID, clientNumber csHash<uint32_t, uint32_t> channelSubscribers; // case-insensitive Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/client.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -254,6 +254,7 @@ /// the alliance id value if the player is member of a guild in an alliance int GetAllianceID(); + /// Sets the player state to ready. For example ready to receive chat messages. void SetReady(bool rdy) { ready = rdy; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/gem.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -491,7 +491,7 @@ }; /** - * + * Returns all the clients which are inside our proxy list. */ csArray<PublishDestination> &GetMulticastClients(); Modified: trunk/src/server/msgmanager.cpp =================================================================== --- trunk/src/server/msgmanager.cpp 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/msgmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) @@ -189,6 +189,7 @@ } } + // Gets the name filter parameters, which is always the last one if(sector != NULL) { if(splitSize > 4) @@ -201,10 +202,12 @@ nameFilter = splitTarget[3]; } + // Checks if the name filter is specified or "all is specified bool allNames = true; if(nameFilter.Length() && nameFilter != "all") allNames = false; + // Checks if the item to filter is a valid one, it has to be players|actors|items|npcs|entities int mode; if(itemName == "players") mode = 0; @@ -223,7 +226,8 @@ return result; } - + // Is sector is specified, take all entities in the sector + // If not take all nearby entities csArray<gemObject*> nearlist; if(sector) { @@ -236,12 +240,14 @@ nearlist = psserver->entitymanager->GetGEM()->FindNearbyEntities(sector, pos, self->GetInstance(), range); } - size_t count = nearlist.GetSize(); - csArray<csString*> results; + // Creates a regular expression based on the last paramter, example Tala* will find Talad. csRegExpMatcher nameMatcher(nameFilter); - for(size_t i=0; i<count; i++) + // For each of the entities found, get object name + size_t count = nearlist.GetSize(); + csArray<csString*> results; + for(size_t i=0; i<count; i++) { gemObject* nearobj = nearlist[i]; if(!nearobj) Modified: trunk/src/server/msgmanager.h =================================================================== --- trunk/src/server/msgmanager.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/msgmanager.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -75,7 +75,9 @@ /** * Decodes an area: expression. - * + * Syntax can be: area:[players|actors|items|npcs|entities]:[range]:[filter] + * Example: area:players:10:Erel* (this will find all players in 10 meters area, which are named Erel*) + * Syntax can be map:mapname[:name] * @param client The client of the caller * @param target The area: expression */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |