Index: src/server/adminmanager.h =================================================================== --- src/server/adminmanager.h (revision 2239) +++ src/server/adminmanager.h (working copy) @@ -359,8 +359,8 @@ /// Change quality of items void HandleSetQuality(psAdminCmdMessage& msg, AdminCmdData& data, Client *client, gemObject* object ); - /// Make an item unstackable - void Unstackable(MsgEntry* me, AdminCmdData& data, Client *client, gemObject* target ); + /// Decide whether an item is stackable or not, bypassing the flag for this type of item + void ItemStackable(MsgEntry* me, AdminCmdData& data, Client *client, gemObject* target ); /// Set trait of a char void HandleSetTrait(psAdminCmdMessage& msg, AdminCmdData& data, Client *client, gemObject* object ); Index: src/server/adminmanager.cpp =================================================================== --- src/server/adminmanager.cpp (revision 2239) +++ src/server/adminmanager.cpp (working copy) @@ -300,7 +300,7 @@ } return true; } - else if (command == "/unstackable") + else if (command == "/setstackable") { setting = words.Get(1); return true; @@ -1424,9 +1424,9 @@ { HandleSetQuality(msg, data, client, targetobject); } - else if (data.command == "/unstackable") + else if (data.command == "/setstackable") { - Unstackable(me, data, client, targetobject); + ItemStackable(me, data, client, targetobject); } else if (data.command == "/settrait") { @@ -7450,7 +7450,7 @@ } } -void AdminManager::Unstackable(MsgEntry* me, AdminCmdData& data, Client *client, gemObject* object ) +void AdminManager::ItemStackable(MsgEntry* me, AdminCmdData& data, Client *client, gemObject* object ) { if (!object) { @@ -7476,20 +7476,27 @@ } else if (data.setting == "on") { - item->SetIsUnstackable(true); + item->SetIsItemStackable(true); item->Save(false); - psserver->SendSystemOK(client->GetClientNum(), "Unstackable flag ON"); + psserver->SendSystemInfo(client->GetClientNum(), "ItemStackable flag ON"); return; } else if (data.setting == "off") { - item->SetIsUnstackable(false); + item->SetIsItemStackable(false); item->Save(false); - psserver->SendSystemOK(client->GetClientNum(), "Unstackable flag OFF"); + psserver->SendSystemInfo(client->GetClientNum(), "ItemStackable flag OFF"); return; } + else if (data.setting == "reset") + { + item->ResetItemStackable(); + item->Save(false); + psserver->SendSystemInfo(client->GetClientNum(), "ItemStackable flag removed"); + return; + } psserver->SendSystemError(client->GetClientNum(), "%s is not a valid option", data.setting.GetData()); - psserver->SendSystemError(client->GetClientNum(), "Syntax : /unstackable on|off|info"); + psserver->SendSystemError(client->GetClientNum(), "Syntax : /setstackable on|off|reset|info"); } void AdminManager::HandleSetQuality(psAdminCmdMessage& msg, AdminCmdData& data, Client *client, gemObject* object ) Index: src/server/database/mysql/command_access.sql =================================================================== --- src/server/database/mysql/command_access.sql (revision 2239) +++ src/server/database/mysql/command_access.sql (working copy) @@ -113,9 +113,9 @@ INSERT INTO command_group_assignment VALUES( "/setquality", 30 ); INSERT INTO command_group_assignment VALUES( "/setquality", 25 ); INSERT INTO command_group_assignment VALUES( "/setquality", 24 ); -INSERT INTO command_group_assignment VALUES( "/unstackable", 30 ); -INSERT INTO command_group_assignment VALUES( "/unstackable", 25 ); -INSERT INTO command_group_assignment VALUES( "/unstackable", 24 ); +INSERT INTO command_group_assignment VALUES( "/setstackable", 30 ); +INSERT INTO command_group_assignment VALUES( "/setstackable", 25 ); +INSERT INTO command_group_assignment VALUES( "/setstackable", 24 ); INSERT INTO command_group_assignment VALUES( "morph others", 30 ); INSERT INTO command_group_assignment VALUES( "morph others", 25 ); INSERT INTO command_group_assignment VALUES( "morph others", 24 ); Index: src/server/database/mysql/upgrade_schema.sql =================================================================== --- src/server/database/mysql/upgrade_schema.sql (revision 2239) +++ src/server/database/mysql/upgrade_schema.sql (working copy) @@ -985,6 +985,13 @@ INSERT INTO command_group_assignment VALUES( "/unstackable", 24 ); UPDATE `server_options` SET `option_value`='1197' WHERE `option_name`='db_version'; +#### 1198 - Tristan Cragnolini - changing /unstackable to /setstackable +INSERT INTO command_group_assignment VALUES( "/setstackable", 30 ); +INSERT INTO command_group_assignment VALUES( "/setstackable", 25 ); +INSERT INTO command_group_assignment VALUES( "/setstackable", 24 ); +DELETE FROM command_group_assignment WHERE command_name="/unstackable"; +UPDATE `server_options` SET `option_value`='1198' 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 Index: src/server/database/mysql/server_options.sql =================================================================== --- src/server/database/mysql/server_options.sql (revision 2239) +++ src/server/database/mysql/server_options.sql (working copy) @@ -28,7 +28,7 @@ # Dumping data for table server_options # -INSERT INTO `server_options` VALUES ('db_version','1197'); +INSERT INTO `server_options` VALUES ('db_version','1198'); INSERT INTO `server_options` VALUES ('game_time','15:00'); INSERT INTO `server_options` VALUES ('game_date','100-1-1'); INSERT INTO `server_options` VALUES ('standard_motd','This is the message of the day from server_options table.'); Index: src/server/psserver.cpp =================================================================== --- src/server/psserver.cpp (revision 2239) +++ src/server/psserver.cpp (working copy) @@ -89,7 +89,7 @@ #include "introductionmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1197" +#define DATABASE_VERSION_STR "1198" psCharacterLoader psServer::CharacterLoader; Index: src/server/bulkobjects/psitem.cpp =================================================================== --- src/server/bulkobjects/psitem.cpp (revision 2239) +++ src/server/bulkobjects/psitem.cpp (working copy) @@ -320,7 +320,13 @@ if (flagstr.FindSubString("UNSTACKABLE", 0, true) != -1) { flags |= PSITEM_FLAG_UNSTACKABLE; + flags &= ~PSITEM_FLAG_STACKABLE; } + if (flagstr.FindSubString("STACKABLE", 0, true) != -1) + { + flags |= PSITEM_FLAG_STACKABLE; + flags &= ~PSITEM_FLAG_UNSTACKABLE; + } // Lockpick stuff SetLockStrength(row.GetInt("lock_str")); @@ -592,6 +598,11 @@ if (!flagString.IsEmpty()) flagString.Append(","); flagString.Append("UNSTACKABLE"); } + if (flags & PSITEM_FLAG_STACKABLE) + { + if (!flagString.IsEmpty()) flagString.Append(","); + flagString.Append("STACKABLE"); + } targetQuery->AddField("flags",flagString); @@ -1441,11 +1452,15 @@ bool psItem::GetIsStackable() const { - if(!(flags & PSITEM_FLAG_UNSTACKABLE)) + if(flags & PSITEM_FLAG_UNSTACKABLE) { - return current_stats->GetIsStackable(); + return false; } - return false; + if(flags & PSITEM_FLAG_STACKABLE) + { + return true; + } + return current_stats->GetIsStackable(); } bool psItem::GetIsEquipStackable() const @@ -1957,14 +1972,23 @@ } /// this only change the stackability for this instance, not all items (itemStats) -void psItem::SetIsUnstackable(bool v) +void psItem::SetIsItemStackable(bool v) { if (v) + flags |= PSITEM_FLAG_STACKABLE; + flags &= ~PSITEM_FLAG_UNSTACKABLE; + else flags |= PSITEM_FLAG_UNSTACKABLE; - else - flags &= ~PSITEM_FLAG_UNSTACKABLE; + flags &= ~PSITEM_FLAG_STACKABLE; } +///remove the STACKABLE and UNSTACKABLE flag, the items stackability is depending on his type +void psItem::ResetItemStackable() +{ + flags &= ~PSITEM_FLAG_STACKABLE; + flags &= ~PSITEM_FLAG_UNSTACKABLE; +} + void psItem::SetIsKey(bool v) { if (v) Index: src/server/bulkobjects/psitem.h =================================================================== --- src/server/bulkobjects/psitem.h (revision 2239) +++ src/server/bulkobjects/psitem.h (working copy) @@ -124,6 +124,9 @@ /// Flag defines if item can *not* be stacked #define PSITEM_FLAG_UNSTACKABLE 0x00020000 +/// Flag defines if item can be stacked +#define PSITEM_FLAG_STACKABLE 0x00040000 + #define KEY_SKELETON ((unsigned int)-2) #define MAX_STACK_COUNT 65 // This is the most items a player can have in a stack @@ -799,8 +802,8 @@ void SetIsPickupable(bool v); void SetIsUnstackable(bool v); + void ResetItemStackable(); - PSSKILL GetLockpickSkill() { return lockpickSkill; } void SetLockpickSkill(PSSKILL v);