aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql14
-rw-r--r--sql/updates/characters/master/2017_08_20_01_characters.sql9
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp7
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h3
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp46
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h18
-rw-r--r--src/server/game/Entities/Item/Item.cpp2
-rw-r--r--src/server/game/Entities/Item/Item.h6
-rw-r--r--src/server/game/Entities/Player/Player.cpp27
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Guilds/Guild.cpp96
-rw-r--r--src/server/game/Guilds/Guild.h21
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp10
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp14
-rw-r--r--src/server/game/Handlers/MailHandler.cpp4
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp4
-rw-r--r--src/server/game/World/World.cpp2
-rw-r--r--src/server/scripts/Commands/cs_list.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp4
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp3
-rw-r--r--src/server/scripts/Commands/cs_send.cpp2
21 files changed, 160 insertions, 136 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 99558dfd839..1561f245c8d 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -170,12 +170,12 @@ CREATE TABLE `auctionhouse` (
`auctioneerguid` bigint(20) unsigned NOT NULL DEFAULT '0',
`itemguid` bigint(20) unsigned NOT NULL DEFAULT '0',
`itemowner` bigint(20) unsigned NOT NULL DEFAULT '0',
- `buyoutprice` int(10) unsigned NOT NULL DEFAULT '0',
+ `buyoutprice` bigint(20) unsigned NOT NULL DEFAULT '0',
`time` int(10) unsigned NOT NULL DEFAULT '0',
`buyguid` bigint(20) unsigned NOT NULL DEFAULT '0',
- `lastbid` int(10) unsigned NOT NULL DEFAULT '0',
- `startbid` int(10) unsigned NOT NULL DEFAULT '0',
- `deposit` int(10) unsigned NOT NULL DEFAULT '0',
+ `lastbid` bigint(20) unsigned NOT NULL DEFAULT '0',
+ `startbid` bigint(20) unsigned NOT NULL DEFAULT '0',
+ `deposit` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `item_guid` (`itemguid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -2435,7 +2435,7 @@ CREATE TABLE `guild_member_withdraw` (
`tab5` int(10) unsigned NOT NULL DEFAULT '0',
`tab6` int(10) unsigned NOT NULL DEFAULT '0',
`tab7` int(10) unsigned NOT NULL DEFAULT '0',
- `money` int(10) unsigned NOT NULL DEFAULT '0',
+ `money` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Guild Member Daily Withdraws';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2841,7 +2841,7 @@ DROP TABLE IF EXISTS `item_refund_instance`;
CREATE TABLE `item_refund_instance` (
`item_guid` bigint(20) unsigned NOT NULL COMMENT 'Item GUID',
`player_guid` bigint(20) unsigned NOT NULL COMMENT 'Player GUID',
- `paidMoney` int(10) unsigned NOT NULL DEFAULT '0',
+ `paidMoney` bigint(20) unsigned NOT NULL DEFAULT '0',
`paidExtendedCost` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`item_guid`,`player_guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Item Refund System';
@@ -3308,7 +3308,7 @@ CREATE TABLE `updates` (
LOCK TABLES `updates` WRITE;
/*!40000 ALTER TABLE `updates` DISABLE KEYS */;
-INSERT INTO `updates` VALUES ('2014_10_20_00_characters.sql','A5882DA0979CF4DAE33DA011EBAA006C24BE7230','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_00_characters.sql','E2AC4758133EE19B7F08464A445802154D1261C8','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_01_characters.sql','20029E6323D9773B32C34D84FFED1711CC60F09F','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_02_characters.sql','8A7A16886EE71E7ACDDB3DDA6D0ECAC2FD2FDCA8','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_24_00_characters.sql','D008FE81AE844FCA686439D6ECC5108FB0DD1EB9','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_25_00_characters.sql','A39C7BE46686B54776BDAB9D7A882D91EDEC51A4','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_26_00_characters.sql','C787954CC35FE34B4101FDE6527F14C027F4947C','ARCHIVED','2015-03-21 15:55:55',0),('2014_11_12_00_characters.sql','B160BB2313F1BD5F3B076A5A9279DC10D4796E34','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_23_00_characters.sql','3D9D648B2387B357F4BD090B33F80682F7924882','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_28_00_characters.sql','5362922FF4483A336311D73082A5727309CD9219','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_31_00_characters.sql','498DDF2DD936CF156D74A8208DC93DCE9FCAB5AA','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_02_00_characters.sql','E5940BE836F253982E07930120422E598D08BDE1','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_10_00_characters.sql','30796056C8623699B2FE1BF626A19D38262E9284','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_16_00_characters.sql','96642760A54C8D799AAFE438049A63AA521656F2','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_27_00_characters.sql','EB710E3EB9F2CAFD84AB62CDC84E898403A80A4F','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_13_00_characters.sql','405BEB4ED207DC6076442A37EE2AFB1F21E274A0','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_13_01_characters.sql','35F582D4F33BF55D1685A1BA89273ED895FD09C5','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_17_00_characters.sql','8D21FC5A55BF8B55D6DCDCE5F02CF2B640230E94','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_10_00_characters.sql','E565B89B145C340067742DFF2DEF1B74F5F1BD4E','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_01_characters.sql','20BD68468C57FCF7E665B4DA185DCD52FACE8B3F','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_02_characters.sql','0296995DCD3676BA9AE6024CA7C91C5F39D927A3','ARCHIVED','2015-03-21 15:56:46',0),('2015_03_29_00_characters.sql','95D6A46BB746A8BD3EE3FE2086DF1A07F7C33B92','ARCHIVED','2015-05-02 15:43:06',0),('2015_04_21_00_characters.sql','F2032B9BF4EDA7EDE5065554724ED392FD91657D','ARCHIVED','2015-05-02 15:43:06',0),('2015_04_28_00_characters.sql','949F62DB3A3461D420A1230ECF7A6A3ED6435703','ARCHIVED','2015-05-02 15:43:06',0),('2015_05_08_00_characters.sql','0F14B7821618D1C872625B6EDDAA9A667B211167','ARCHIVED','2015-07-10 19:32:17',0),('2015_05_22_00_characters.sql','65B82152413FAB23BE413656E59A486A74447FF7','ARCHIVED','2015-07-10 19:32:17',0),('2015_07_08_00_characters.sql','DAB25360ACB5244C8F8E6214CF6BD97160588A5B','ARCHIVED','2015-07-10 19:32:17',0),('2015_07_11_00_characters.sql','B421B6C0E57BD0FD587071358863D9DABF4BA849','ARCHIVED','2015-07-13 21:50:02',0),('2015_07_12_00_characters.sql','E98E7FD61EF6426E7EDE8ED9AD8C15D8D7132589','ARCHIVED','2015-07-13 21:50:02',0),('2015_07_28_00_characters.sql','0711BC3A658D189EF71B0CB68DCFF2E9B781C4A0','ARCHIVED','2015-07-29 16:23:56',0),('2015_08_08_00_characters.sql','EA12BB2DC24FAF2300A96D0888A45BBEA158D5DC','ARCHIVED','2015-08-08 16:34:07',0),('2015_08_12_00_characters.sql','4FD7F89FE5DA51D4E0C33E520719986AA3EBD31B','ARCHIVED','2015-08-12 12:35:20',0),('2015_09_05_00_characters.sql','4C22BB29365BE4B6B95E64DAD84B63CA002304EA','ARCHIVED','2015-09-05 12:35:20',0),('2015_09_09_00_characters.sql','AFC32E693BC17CFD9A17919FE5317B8FE337ACAD','ARCHIVED','2015-09-09 12:35:20',0),('2015_09_10_00_characters.sql','4555A7F35C107E54C13D74D20F141039ED42943E','ARCHIVED','2015-09-10 22:50:42',0),('2015_10_16_00_characters.sql','E3A3FFF0CB42F04A8DCF0CE4362143C16E2083AF','ARCHIVED','2015-10-15 21:54:11',0),('2015_11_06_00_characters_2015_10_12_00.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-11-06 23:43:27',0),('2015_11_08_00_characters.sql','0ACDD35EC9745231BCFA701B78056DEF94D0CC53','ARCHIVED','2015-11-08 00:51:45',15),('2015_11_23_00_characters.sql','9FC828E9E48E8E2E9B99A5A0073D6614C5BFC6B5','ARCHIVED','2015-11-22 23:27:34',0),('2016_01_05_00_characters.sql','0EAD24977F40DE2476B4567DA2B477867CC0DA1A','ARCHIVED','2016-01-04 23:07:40',0),('2016_04_05_00_characters_2016_02_10_00_characters.sql','F1B4DA202819CABC7319A4470A2D224A34609E97','ARCHIVED','2016-04-05 20:34:41',0),('2016_04_11_00_characters.sql','0ACDD35EC9745231BCFA701B78056DEF94D0CC53','ARCHIVED','2016-04-11 02:24:14',30),('2016_04_11_01_characters.sql','CA90F6D99C1EEA7B25BD58BC8368A8D78234BBEF','ARCHIVED','2016-04-11 18:14:18',0),('2016_05_07_00_characters.sql','D1DB5557B21A552C935564D829B4E98B98149077','ARCHIVED','2016-05-07 00:00:00',0),('2016_05_26_00_characters.sql','4179ADC32B96FD8D7D4CF5509A470B1ACE00BE85','ARCHIVED','2016-05-26 17:06:16',0),('2016_07_16_00_characters.sql','EF267FCB92B383FFB33C700508EAF3FBC1F8AC23','ARCHIVED','2016-07-16 14:45:12',0),('2016_07_19_00_characters.sql','AA2C516FA81B451071EA82F58F447E9D13E5D1BD','ARCHIVED','2016-07-19 14:36:25',0),('2016_07_19_01_characters.sql','E9AF46AF4C7CC2E2779E44254AEEDF880D020166','ARCHIVED','2016-07-19 14:36:25',0),('2016_07_19_02_characters.sql','5B1B334449996F3639C9226F587129E03DC4BF6D','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_03_characters.sql','7787C8A67D720492FED4BF60ADB22D3CDE1C536D','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_04_characters.sql','6D4B536094367AC9EF7CDFF41A4F96EB00B25EE5','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_05_characters.sql','12639268DC5F78CE900B59D5C646B10D70842928','ARCHIVED','2016-07-19 14:36:27',0),('2016_07_19_06_characters.sql','9F5A4B533E6BFBAA718DE5160E1FDCB8471A88BF','ARCHIVED','2016-07-19 14:36:28',0),('2016_07_19_07_characters.sql','1E8273FFD4340CBD7BB71D2406E23E9EF7230CFA','ARCHIVED','2016-07-19 14:36:29',0),('2016_07_19_08_characters.sql','FB41FD2F8A7114FEE154021A9D47488C4B12E2A9','ARCHIVED','2016-07-19 14:36:29',0),('2016_08_15_00_characters.sql','BF0B5F453384210CD77C54E262A19B888AAA4095','ARCHIVED','2016-08-14 18:14:32',0),('2016_08_25_00_characters.sql','4AD506C3FCE54238EF452AC07EC562BD41A9D50C','ARCHIVED','2016-08-25 22:54:11',0),('2016_10_17_00_characters.sql','A0EF594CD73690D46A46031137DB0E895F079235','ARCHIVED','2016-10-16 16:33:05',25),('2016_10_25_00_characters.sql','CC894484561CE138C10B69D34F7831CEDFAF496B','ARCHIVED','2016-10-25 17:19:35',0),('2016_11_06_00_characters.sql','C7EC8B65C1BE7722C53BAB79C52C1549054178C0','ARCHIVED','2016-11-06 23:05:44',0),('2016_12_09_00_characters.sql','2A68E4187CE7F7294CBC3804AC39F48B2727E64E','ARCHIVED','2016-12-09 18:38:46',0),('2016_12_26_00_characters.sql','D265DE655DDBFC13E2FA1EB021A435A21189B6E4','ARCHIVED','2016-12-26 18:45:15',0),('2017_01_22_00_characters.sql','62B08B5FB1DA7B207C74DC000C42517A2D6F6BCC','ARCHIVED','2017-01-22 02:06:31',0),('2017_01_29_00_characters.sql','E7475DCC13A0910FF23BF0EFB731629950A73A0D','ARCHIVED','2017-01-29 15:00:00',0),('2017_02_26_00_characters_2016_09_13_00_characters.sql','2EF7AD507D097ABC74FF1E98A65BEC03B12E51C6','ARCHIVED','2017-02-26 19:57:47',0),('2017_04_15_00_characters.sql','F118BA33CD7DDF2EE5673C6749C2965EFFF53C23','ARCHIVED','2017-04-15 12:10:50',0),('2017_04_19_00_characters.sql','5A36FD9015ED024BC085F995F72DC81B47CD1093','RELEASED','2017-04-18 23:16:18',30),('2017_05_08_00_characters.sql','86B5603EEBE1DE0EA56DBB264257967CFE583F46','RELEASED','2017-05-08 23:54:40',0),('2017_05_14_00_characters.sql','3452261F366BFE76BB59C0AAA674FA1513042899','RELEASED','2017-05-14 17:29:04',0),('2017_05_24_00_characters.sql','02701BF57589CD41456A748AEF425CBB2D3E6AD7','RELEASED','2017-05-24 22:00:00',0),('2017_06_04_00_characters.sql','BC80D2B7515CC6E01701070D2DA466727F36DB5E','RELEASED','2017-06-04 14:43:26',0),('2017_08_20_00_characters.sql','8C5BBF6AEAA6C7DE2F40A7D3878C8187A4729F13','RELEASED','2017-08-20 17:00:00',0);
+INSERT INTO `updates` VALUES ('2014_10_20_00_characters.sql','A5882DA0979CF4DAE33DA011EBAA006C24BE7230','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_00_characters.sql','E2AC4758133EE19B7F08464A445802154D1261C8','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_01_characters.sql','20029E6323D9773B32C34D84FFED1711CC60F09F','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_23_02_characters.sql','8A7A16886EE71E7ACDDB3DDA6D0ECAC2FD2FDCA8','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_24_00_characters.sql','D008FE81AE844FCA686439D6ECC5108FB0DD1EB9','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_25_00_characters.sql','A39C7BE46686B54776BDAB9D7A882D91EDEC51A4','ARCHIVED','2015-03-21 15:55:55',0),('2014_10_26_00_characters.sql','C787954CC35FE34B4101FDE6527F14C027F4947C','ARCHIVED','2015-03-21 15:55:55',0),('2014_11_12_00_characters.sql','B160BB2313F1BD5F3B076A5A9279DC10D4796E34','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_23_00_characters.sql','3D9D648B2387B357F4BD090B33F80682F7924882','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_28_00_characters.sql','5362922FF4483A336311D73082A5727309CD9219','ARCHIVED','2015-03-21 15:55:55',0),('2014_12_31_00_characters.sql','498DDF2DD936CF156D74A8208DC93DCE9FCAB5AA','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_02_00_characters.sql','E5940BE836F253982E07930120422E598D08BDE1','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_10_00_characters.sql','30796056C8623699B2FE1BF626A19D38262E9284','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_16_00_characters.sql','96642760A54C8D799AAFE438049A63AA521656F2','ARCHIVED','2015-03-21 15:55:55',0),('2015_01_27_00_characters.sql','EB710E3EB9F2CAFD84AB62CDC84E898403A80A4F','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_13_00_characters.sql','405BEB4ED207DC6076442A37EE2AFB1F21E274A0','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_13_01_characters.sql','35F582D4F33BF55D1685A1BA89273ED895FD09C5','ARCHIVED','2015-03-21 15:55:55',0),('2015_02_17_00_characters.sql','8D21FC5A55BF8B55D6DCDCE5F02CF2B640230E94','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_10_00_characters.sql','E565B89B145C340067742DFF2DEF1B74F5F1BD4E','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_01_characters.sql','20BD68468C57FCF7E665B4DA185DCD52FACE8B3F','ARCHIVED','2015-03-21 15:55:55',0),('2015_03_20_02_characters.sql','0296995DCD3676BA9AE6024CA7C91C5F39D927A3','ARCHIVED','2015-03-21 15:56:46',0),('2015_03_29_00_characters.sql','95D6A46BB746A8BD3EE3FE2086DF1A07F7C33B92','ARCHIVED','2015-05-02 15:43:06',0),('2015_04_21_00_characters.sql','F2032B9BF4EDA7EDE5065554724ED392FD91657D','ARCHIVED','2015-05-02 15:43:06',0),('2015_04_28_00_characters.sql','949F62DB3A3461D420A1230ECF7A6A3ED6435703','ARCHIVED','2015-05-02 15:43:06',0),('2015_05_08_00_characters.sql','0F14B7821618D1C872625B6EDDAA9A667B211167','ARCHIVED','2015-07-10 19:32:17',0),('2015_05_22_00_characters.sql','65B82152413FAB23BE413656E59A486A74447FF7','ARCHIVED','2015-07-10 19:32:17',0),('2015_07_08_00_characters.sql','DAB25360ACB5244C8F8E6214CF6BD97160588A5B','ARCHIVED','2015-07-10 19:32:17',0),('2015_07_11_00_characters.sql','B421B6C0E57BD0FD587071358863D9DABF4BA849','ARCHIVED','2015-07-13 21:50:02',0),('2015_07_12_00_characters.sql','E98E7FD61EF6426E7EDE8ED9AD8C15D8D7132589','ARCHIVED','2015-07-13 21:50:02',0),('2015_07_28_00_characters.sql','0711BC3A658D189EF71B0CB68DCFF2E9B781C4A0','ARCHIVED','2015-07-29 16:23:56',0),('2015_08_08_00_characters.sql','EA12BB2DC24FAF2300A96D0888A45BBEA158D5DC','ARCHIVED','2015-08-08 16:34:07',0),('2015_08_12_00_characters.sql','4FD7F89FE5DA51D4E0C33E520719986AA3EBD31B','ARCHIVED','2015-08-12 12:35:20',0),('2015_09_05_00_characters.sql','4C22BB29365BE4B6B95E64DAD84B63CA002304EA','ARCHIVED','2015-09-05 12:35:20',0),('2015_09_09_00_characters.sql','AFC32E693BC17CFD9A17919FE5317B8FE337ACAD','ARCHIVED','2015-09-09 12:35:20',0),('2015_09_10_00_characters.sql','4555A7F35C107E54C13D74D20F141039ED42943E','ARCHIVED','2015-09-10 22:50:42',0),('2015_10_16_00_characters.sql','E3A3FFF0CB42F04A8DCF0CE4362143C16E2083AF','ARCHIVED','2015-10-15 21:54:11',0),('2015_11_06_00_characters_2015_10_12_00.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-11-06 23:43:27',0),('2015_11_08_00_characters.sql','0ACDD35EC9745231BCFA701B78056DEF94D0CC53','ARCHIVED','2015-11-08 00:51:45',15),('2015_11_23_00_characters.sql','9FC828E9E48E8E2E9B99A5A0073D6614C5BFC6B5','ARCHIVED','2015-11-22 23:27:34',0),('2016_01_05_00_characters.sql','0EAD24977F40DE2476B4567DA2B477867CC0DA1A','ARCHIVED','2016-01-04 23:07:40',0),('2016_04_05_00_characters_2016_02_10_00_characters.sql','F1B4DA202819CABC7319A4470A2D224A34609E97','ARCHIVED','2016-04-05 20:34:41',0),('2016_04_11_00_characters.sql','0ACDD35EC9745231BCFA701B78056DEF94D0CC53','ARCHIVED','2016-04-11 02:24:14',30),('2016_04_11_01_characters.sql','CA90F6D99C1EEA7B25BD58BC8368A8D78234BBEF','ARCHIVED','2016-04-11 18:14:18',0),('2016_05_07_00_characters.sql','D1DB5557B21A552C935564D829B4E98B98149077','ARCHIVED','2016-05-07 00:00:00',0),('2016_05_26_00_characters.sql','4179ADC32B96FD8D7D4CF5509A470B1ACE00BE85','ARCHIVED','2016-05-26 17:06:16',0),('2016_07_16_00_characters.sql','EF267FCB92B383FFB33C700508EAF3FBC1F8AC23','ARCHIVED','2016-07-16 14:45:12',0),('2016_07_19_00_characters.sql','AA2C516FA81B451071EA82F58F447E9D13E5D1BD','ARCHIVED','2016-07-19 14:36:25',0),('2016_07_19_01_characters.sql','E9AF46AF4C7CC2E2779E44254AEEDF880D020166','ARCHIVED','2016-07-19 14:36:25',0),('2016_07_19_02_characters.sql','5B1B334449996F3639C9226F587129E03DC4BF6D','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_03_characters.sql','7787C8A67D720492FED4BF60ADB22D3CDE1C536D','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_04_characters.sql','6D4B536094367AC9EF7CDFF41A4F96EB00B25EE5','ARCHIVED','2016-07-19 14:36:26',0),('2016_07_19_05_characters.sql','12639268DC5F78CE900B59D5C646B10D70842928','ARCHIVED','2016-07-19 14:36:27',0),('2016_07_19_06_characters.sql','9F5A4B533E6BFBAA718DE5160E1FDCB8471A88BF','ARCHIVED','2016-07-19 14:36:28',0),('2016_07_19_07_characters.sql','1E8273FFD4340CBD7BB71D2406E23E9EF7230CFA','ARCHIVED','2016-07-19 14:36:29',0),('2016_07_19_08_characters.sql','FB41FD2F8A7114FEE154021A9D47488C4B12E2A9','ARCHIVED','2016-07-19 14:36:29',0),('2016_08_15_00_characters.sql','BF0B5F453384210CD77C54E262A19B888AAA4095','ARCHIVED','2016-08-14 18:14:32',0),('2016_08_25_00_characters.sql','4AD506C3FCE54238EF452AC07EC562BD41A9D50C','ARCHIVED','2016-08-25 22:54:11',0),('2016_10_17_00_characters.sql','A0EF594CD73690D46A46031137DB0E895F079235','ARCHIVED','2016-10-16 16:33:05',25),('2016_10_25_00_characters.sql','CC894484561CE138C10B69D34F7831CEDFAF496B','ARCHIVED','2016-10-25 17:19:35',0),('2016_11_06_00_characters.sql','C7EC8B65C1BE7722C53BAB79C52C1549054178C0','ARCHIVED','2016-11-06 23:05:44',0),('2016_12_09_00_characters.sql','2A68E4187CE7F7294CBC3804AC39F48B2727E64E','ARCHIVED','2016-12-09 18:38:46',0),('2016_12_26_00_characters.sql','D265DE655DDBFC13E2FA1EB021A435A21189B6E4','ARCHIVED','2016-12-26 18:45:15',0),('2017_01_22_00_characters.sql','62B08B5FB1DA7B207C74DC000C42517A2D6F6BCC','ARCHIVED','2017-01-22 02:06:31',0),('2017_01_29_00_characters.sql','E7475DCC13A0910FF23BF0EFB731629950A73A0D','ARCHIVED','2017-01-29 15:00:00',0),('2017_02_26_00_characters_2016_09_13_00_characters.sql','2EF7AD507D097ABC74FF1E98A65BEC03B12E51C6','ARCHIVED','2017-02-26 19:57:47',0),('2017_04_15_00_characters.sql','F118BA33CD7DDF2EE5673C6749C2965EFFF53C23','ARCHIVED','2017-04-15 12:10:50',0),('2017_04_19_00_characters.sql','5A36FD9015ED024BC085F995F72DC81B47CD1093','RELEASED','2017-04-18 23:16:18',30),('2017_05_08_00_characters.sql','86B5603EEBE1DE0EA56DBB264257967CFE583F46','RELEASED','2017-05-08 23:54:40',0),('2017_05_14_00_characters.sql','3452261F366BFE76BB59C0AAA674FA1513042899','RELEASED','2017-05-14 17:29:04',0),('2017_05_24_00_characters.sql','02701BF57589CD41456A748AEF425CBB2D3E6AD7','RELEASED','2017-05-24 22:00:00',0),('2017_06_04_00_characters.sql','BC80D2B7515CC6E01701070D2DA466727F36DB5E','RELEASED','2017-06-04 14:43:26',0),('2017_08_20_00_characters.sql','8C5BBF6AEAA6C7DE2F40A7D3878C8187A4729F13','RELEASED','2017-08-20 17:00:00',0),('2017_08_20_01_characters.sql','2F50D5E6BF3888B8C5270D79228A1D0601FAFF1D','RELEASED','2017-08-20 17:52:21',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/master/2017_08_20_01_characters.sql b/sql/updates/characters/master/2017_08_20_01_characters.sql
new file mode 100644
index 00000000000..3f37d8a9407
--- /dev/null
+++ b/sql/updates/characters/master/2017_08_20_01_characters.sql
@@ -0,0 +1,9 @@
+ALTER TABLE `auctionhouse`
+ CHANGE `buyoutprice` `buyoutprice` bigint(20) unsigned NOT NULL DEFAULT '0',
+ CHANGE `lastbid` `lastbid` bigint(20) unsigned NOT NULL DEFAULT '0',
+ CHANGE `startbid` `startbid` bigint(20) unsigned NOT NULL DEFAULT '0',
+ CHANGE `deposit` `deposit` bigint(20) unsigned NOT NULL DEFAULT '0';
+
+ALTER TABLE `guild_member_withdraw` CHANGE `money` `money` bigint(20) unsigned NOT NULL DEFAULT '0';
+
+ALTER TABLE `item_refund_instance` CHANGE `paidMoney` `paidMoney` bigint(20) unsigned NOT NULL DEFAULT '0';
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index ad4998b9543..5086dc8da1f 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -253,9 +253,10 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC); // 0: uint32, 1: uint8, 2: uint32
PrepareStatement(CHAR_UPD_GUILD_BANK_TAB_TEXT, "UPDATE guild_bank_tab SET TabText = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC); // 0: string, 1: uint32, 2: uint8
- PrepareStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW,
- "INSERT INTO guild_member_withdraw (guid, tab0, tab1, tab2, tab3, tab4, tab5, tab6, tab7, money) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "
- "ON DUPLICATE KEY UPDATE tab0 = VALUES (tab0), tab1 = VALUES (tab1), tab2 = VALUES (tab2), tab3 = VALUES (tab3), tab4 = VALUES (tab4), tab5 = VALUES (tab5), tab6 = VALUES (tab6), tab7 = VALUES (tab7), money = VALUES (money)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW_TABS,
+ "INSERT INTO guild_member_withdraw (guid, tab0, tab1, tab2, tab3, tab4, tab5, tab6, tab7) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) "
+ "ON DUPLICATE KEY UPDATE tab0 = VALUES (tab0), tab1 = VALUES (tab1), tab2 = VALUES (tab2), tab3 = VALUES (tab3), tab4 = VALUES (tab4), tab5 = VALUES (tab5), tab6 = VALUES (tab6), tab7 = VALUES (tab7)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW_MONEY, "INSERT INTO guild_member_withdraw (guid, money) VALUES (?, ?) ON DUPLICATE KEY UPDATE money = VALUES (money)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GUILD_MEMBER_WITHDRAW, "TRUNCATE guild_member_withdraw", CONNECTION_ASYNC);
// 0: uint32, 1: uint32, 2: uint32
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index b2acafc2308..a4f422665fc 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -208,7 +208,8 @@ enum CharacterDatabaseStatements : uint32
CHAR_UPD_GUILD_BANK_MONEY,
CHAR_UPD_GUILD_RANK_BANK_MONEY,
CHAR_UPD_GUILD_BANK_TAB_TEXT,
- CHAR_INS_GUILD_MEMBER_WITHDRAW,
+ CHAR_INS_GUILD_MEMBER_WITHDRAW_TABS,
+ CHAR_INS_GUILD_MEMBER_WITHDRAW_MONEY,
CHAR_DEL_GUILD_MEMBER_WITHDRAW,
CHAR_SEL_CHAR_DATA_FOR_GUILD,
CHAR_DEL_GUILD_ACHIEVEMENT,
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 02c9224e4ea..471b2e1861f 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -72,7 +72,7 @@ AuctionHouseObject* AuctionHouseMgr::GetAuctionsMap(uint32 factionTemplateId)
return &mNeutralAuctions;
}
-uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count)
+uint64 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count)
{
uint32 MSV = pItem->GetTemplate()->GetSellPrice();
@@ -81,7 +81,7 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32
float multiplier = CalculatePct(float(entry->DepositRate), 3);
uint32 timeHr = (((time / 60) / 60) / 12);
- uint32 deposit = uint32(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT));
+ uint64 deposit = uint64(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT));
float remainderbase = float(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT)) - deposit;
deposit *= timeHr * count;
@@ -96,7 +96,7 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32
TC_LOG_DEBUG("auctionHouse", "MSV: %u", MSV);
TC_LOG_DEBUG("auctionHouse", "Items: %u", count);
TC_LOG_DEBUG("auctionHouse", "Multiplier: %f", multiplier);
- TC_LOG_DEBUG("auctionHouse", "Deposit: %u", deposit);
+ TC_LOG_DEBUG("auctionHouse", "Deposit: " UI64FMTD, deposit);
TC_LOG_DEBUG("auctionHouse", "Deposit rm: %f", remainderbase * count);
if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT))
@@ -143,7 +143,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
uint32 ownerAccId = ObjectMgr::GetPlayerAccountIdByGUID(ownerGuid);
- sLog->outCommand(bidderAccId, "GM %s (Account: %u) won item in auction: %s (Entry: %u Count: %u) and pay money: %u. Original owner %s (Account: %u)",
+ sLog->outCommand(bidderAccId, "GM %s (Account: %u) won item in auction: %s (Entry: %u Count: %u) and pay money: " UI64FMTD ". Original owner %s (Account: %u)",
bidderName.c_str(), bidderAccId, item->GetTemplate()->GetDefaultLocaleName(), item->GetEntry(), item->GetCount(), auction->bid, ownerName.c_str(), ownerAccId);
}
@@ -197,7 +197,7 @@ void AuctionHouseMgr::SendAuctionSuccessfulMail(AuctionEntry* auction, SQLTransa
// owner exist
if (owner || owner_accId)
{
- uint32 profit = auction->bid + auction->deposit - auction->GetAuctionCut();
+ uint64 profit = auction->bid + auction->deposit - auction->GetAuctionCut();
//FIXME: what do if owner offline
if (owner && item)
@@ -243,7 +243,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti
}
//this function sends mail to old bidder
-void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 /*newPrice*/, Player* /*newBidder*/, SQLTransaction& trans)
+void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint64 /*newPrice*/, Player* /*newBidder*/, SQLTransaction& trans)
{
ObjectGuid oldBidder_guid = ObjectGuid::Create<HighGuid::Player>(auction->bidder);
Player* oldBidder = ObjectAccessor::FindConnectedPlayer(oldBidder_guid);
@@ -440,13 +440,13 @@ void AuctionHouseMgr::PendingAuctionProcess(Player* player)
totalItems += AH->itemCount;
}
- uint32 totaldeposit = 0;
+ uint64 totaldeposit = 0;
auto itr = (*thisAH->begin());
if (Item* item = GetAItem(itr->itemGUIDLow))
totaldeposit = GetAuctionDeposit(itr->auctionHouseEntry, itr->etime, item, totalItems);
- uint32 depositremain = totaldeposit;
+ uint64 depositremain = totaldeposit;
for (auto itrAH = thisAH->begin(); itrAH != thisAH->end(); ++itrAH)
{
AuctionEntry* AH = (*itrAH);
@@ -466,7 +466,7 @@ void AuctionHouseMgr::PendingAuctionProcess(Player* player)
CharacterDatabase.CommitTransaction(trans);
pendingAuctionMap.erase(player->GetGUID());
delete thisAH;
- player->ModifyMoney(-int32(totaldeposit));
+ player->ModifyMoney(-int64(totaldeposit));
}
void AuctionHouseMgr::UpdatePendingAuctions()
@@ -866,16 +866,16 @@ void AuctionEntry::BuildAuctionInfo(std::vector<WorldPackets::AuctionHouse::Auct
items.emplace_back(auctionItem);
}
-uint32 AuctionEntry::GetAuctionCut() const
+uint64 AuctionEntry::GetAuctionCut() const
{
- int32 cut = int32(CalculatePct(bid, auctionHouseEntry->ConsignmentRate) * sWorld->getRate(RATE_AUCTION_CUT));
- return std::max(cut, 0);
+ int64 cut = int64(CalculatePct(bid, auctionHouseEntry->ConsignmentRate) * sWorld->getRate(RATE_AUCTION_CUT));
+ return std::max(cut, int64(0));
}
/// the sum of outbid is (1% from current bid)*5, if bid is very small, it is 1c
-uint32 AuctionEntry::GetAuctionOutBid() const
+uint64 AuctionEntry::GetAuctionOutBid() const
{
- uint32 outbid = CalculatePct(bid, 5);
+ uint64 outbid = CalculatePct(bid, 5);
return outbid ? outbid : 1;
}
@@ -893,12 +893,12 @@ void AuctionEntry::SaveToDB(SQLTransaction& trans) const
stmt->setUInt64(1, auctioneer);
stmt->setUInt64(2, itemGUIDLow);
stmt->setUInt64(3, owner);
- stmt->setUInt32(4, buyout);
+ stmt->setUInt64(4, buyout);
stmt->setUInt32(5, uint32(expire_time));
stmt->setUInt64(6, bidder);
- stmt->setUInt32(7, bid);
- stmt->setUInt32(8, startbid);
- stmt->setUInt32(9, deposit);
+ stmt->setUInt64(7, bid);
+ stmt->setUInt64(8, startbid);
+ stmt->setUInt64(9, deposit);
trans->Append(stmt);
}
@@ -910,12 +910,12 @@ bool AuctionEntry::LoadFromDB(Field* fields)
itemEntry = fields[3].GetUInt32();
itemCount = fields[4].GetUInt32();
owner = fields[5].GetUInt64();
- buyout = fields[6].GetUInt32();
+ buyout = fields[6].GetUInt64();
expire_time = fields[7].GetUInt32();
bidder = fields[8].GetUInt64();
- bid = fields[9].GetUInt32();
- startbid = fields[10].GetUInt32();
- deposit = fields[11].GetUInt32();
+ bid = fields[9].GetUInt64();
+ startbid = fields[10].GetUInt64();
+ deposit = fields[11].GetUInt64();
CreatureData const* auctioneerData = sObjectMgr->GetCreatureData(auctioneer);
if (!auctioneerData)
@@ -956,7 +956,7 @@ std::string AuctionEntry::BuildAuctionMailSubject(MailAuctionAnswers response) c
return strm.str();
}
-std::string AuctionEntry::BuildAuctionMailBody(uint64 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut)
+std::string AuctionEntry::BuildAuctionMailBody(uint64 lowGuid, uint64 bid, uint64 buyout, uint64 deposit, uint64 cut)
{
std::ostringstream strm;
strm.width(16);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index e7b49c20b5e..4f2eb2863e8 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -85,12 +85,12 @@ struct TC_GAME_API AuctionEntry
uint32 itemEntry;
uint32 itemCount;
ObjectGuid::LowType owner;
- uint32 startbid; //maybe useless
- uint32 bid;
- uint32 buyout;
+ uint64 startbid; //maybe useless
+ uint64 bid;
+ uint64 buyout;
time_t expire_time;
ObjectGuid::LowType bidder;
- uint32 deposit; //deposit can be calculated only when creating auction
+ uint64 deposit; //deposit can be calculated only when creating auction
uint32 etime;
uint32 houseId;
AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc
@@ -99,14 +99,14 @@ struct TC_GAME_API AuctionEntry
// helpers
uint32 GetHouseId() const { return houseId; }
uint32 GetHouseFaction() const { return auctionHouseEntry->FactionID; }
- uint32 GetAuctionCut() const;
- uint32 GetAuctionOutBid() const;
+ uint64 GetAuctionCut() const;
+ uint64 GetAuctionOutBid() const;
void BuildAuctionInfo(std::vector<WorldPackets::AuctionHouse::AuctionItem>& items, bool listAuctionItems, Item* sourceItem = nullptr) const;
void DeleteFromDB(SQLTransaction& trans) const;
void SaveToDB(SQLTransaction& trans) const;
bool LoadFromDB(Field* fields);
std::string BuildAuctionMailSubject(MailAuctionAnswers response) const;
- static std::string BuildAuctionMailBody(uint64 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut);
+ static std::string BuildAuctionMailBody(uint64 lowGuid, uint64 bid, uint64 buyout, uint64 deposit, uint64 cut);
};
@@ -215,10 +215,10 @@ class TC_GAME_API AuctionHouseMgr
void SendAuctionSalePendingMail(AuctionEntry* auction, SQLTransaction& trans);
void SendAuctionSuccessfulMail(AuctionEntry* auction, SQLTransaction& trans);
void SendAuctionExpiredMail(AuctionEntry* auction, SQLTransaction& trans);
- void SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, SQLTransaction& trans);
+ void SendAuctionOutbiddedMail(AuctionEntry* auction, uint64 newPrice, Player* newBidder, SQLTransaction& trans);
void SendAuctionCancelledToBidderMail(AuctionEntry* auction, SQLTransaction& trans);
- static uint32 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count);
+ static uint64 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count);
static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId, uint32* houseId);
public:
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index d81c4e8e59d..e616c3fd459 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1531,7 +1531,7 @@ void Item::SaveRefundDataToDB()
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_REFUND_INSTANCE);
stmt->setUInt64(0, GetGUID().GetCounter());
stmt->setUInt64(1, GetRefundRecipient().GetCounter());
- stmt->setUInt32(2, GetPaidMoney());
+ stmt->setUInt64(2, GetPaidMoney());
stmt->setUInt16(3, uint16(GetPaidExtendedCost()));
trans->Append(stmt);
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 31dbb82c098..d2d67afebf0 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -277,11 +277,11 @@ class TC_GAME_API Item : public Object
// Item Refund system
void SetNotRefundable(Player* owner, bool changestate = true, SQLTransaction* trans = nullptr, bool addToCollection = true);
void SetRefundRecipient(ObjectGuid const& guid) { m_refundRecipient = guid; }
- void SetPaidMoney(uint32 money) { m_paidMoney = money; }
+ void SetPaidMoney(uint64 money) { m_paidMoney = money; }
void SetPaidExtendedCost(uint32 iece) { m_paidExtendedCost = iece; }
ObjectGuid const& GetRefundRecipient() const { return m_refundRecipient; }
- uint32 GetPaidMoney() const { return m_paidMoney; }
+ uint64 GetPaidMoney() const { return m_paidMoney; }
uint32 GetPaidExtendedCost() const { return m_paidExtendedCost; }
void UpdatePlayedTime(Player* owner);
@@ -342,7 +342,7 @@ class TC_GAME_API Item : public Object
bool mb_in_trade; // true if item is currently in trade-window
time_t m_lastPlayedTimeUpdate;
ObjectGuid m_refundRecipient;
- uint32 m_paidMoney;
+ uint64 m_paidMoney;
uint32 m_paidExtendedCost;
GuidSet allowedGUIDs;
ItemRandomEnchantmentId m_randomEnchantment; // store separately to easily find which bonus list is the one randomly given for stat rerolling
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index e2611e9c9ac..3508f36c3d0 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -129,7 +129,7 @@
static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 };
-uint64 const MAX_MONEY_AMOUNT = 9999999999ULL;
+uint64 const MAX_MONEY_AMOUNT = 99999999999ULL;
Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
{
@@ -530,7 +530,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
InitRunes();
- SetUInt32Value(PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY));
+ SetUInt64Value(PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY));
SetCurrency(CURRENCY_TYPE_APEXIS_CRYSTALS, sWorld->getIntConfig(CONFIG_CURRENCY_START_APEXIS_CRYSTALS));
SetCurrency(CURRENCY_TYPE_JUSTICE_POINTS, sWorld->getIntConfig(CONFIG_CURRENCY_START_JUSTICE_POINTS));
@@ -18633,7 +18633,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
item->SetRefundRecipient(GetGUID());
- item->SetPaidMoney((*result)[0].GetUInt32());
+ item->SetPaidMoney((*result)[0].GetUInt64());
item->SetPaidExtendedCost((*result)[1].GetUInt16());
AddRefundReference(item->GetGUID());
}
@@ -22170,7 +22170,7 @@ void Player::InitDisplayIds()
}
}
-inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int32 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore)
+inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int64 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore)
{
uint32 stacks = count / pProto->GetBuyCount();
ItemPosCountVec vDest;
@@ -22464,7 +22464,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
// check current item amount if it limited
if (crItem->maxcount != 0)
{
- if (creature->GetVendorItemCurrentCount(crItem) < pProto->GetBuyCount() * count)
+ if (creature->GetVendorItemCurrentCount(crItem) < count)
{
SendBuyError(BUY_ERR_ITEM_ALREADY_SOLD, creature, item, 0);
return false;
@@ -22554,25 +22554,26 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
}
}
- uint32 price = 0;
+ uint64 price = 0;
if (crItem->IsGoldRequired(pProto) && pProto->GetBuyPrice() > 0) //Assume price cannot be negative (do not know why it is int32)
{
- uint32 maxCount = MAX_MONEY_AMOUNT / pProto->GetBuyPrice();
- if ((uint32)count > maxCount)
+ float buyPricePerItem = float(pProto->GetBuyPrice()) / pProto->GetBuyCount();
+ uint64 maxCount = MAX_MONEY_AMOUNT / buyPricePerItem;
+ if ((uint64)count > maxCount)
{
TC_LOG_ERROR("entities.player.cheat", "Player::BuyItemFromVendorSlot: Player '%s' (%s) tried to buy item (ItemID: %u, Count: %u), causing overflow",
GetName().c_str(), GetGUID().ToString().c_str(), pProto->GetId(), (uint32)count);
count = (uint8)maxCount;
}
- price = pProto->GetBuyPrice() * count; //it should not exceed MAX_MONEY_AMOUNT
+ price = uint64(buyPricePerItem * count); //it should not exceed MAX_MONEY_AMOUNT
// reputation discount
- price = uint32(floor(price * GetReputationPriceDiscount(creature)));
+ price = uint64(floor(price * GetReputationPriceDiscount(creature)));
if (int32 priceMod = GetTotalAuraModifier(SPELL_AURA_MOD_VENDOR_ITEMS_PRICES))
price -= CalculatePct(price, priceMod);
- if (!HasEnoughMoney(uint64(price)))
+ if (!HasEnoughMoney(price))
{
SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, item, 0);
return false;
@@ -23317,7 +23318,7 @@ bool Player::ModifyMoney(int64 amount, bool sendError /*= true*/)
SetMoney(GetMoney() > uint64(-amount) ? GetMoney() + amount : 0);
else
{
- if (GetMoney() < MAX_MONEY_AMOUNT - static_cast<uint64>(amount))
+ if (GetMoney() <= MAX_MONEY_AMOUNT - static_cast<uint64>(amount))
SetMoney(GetMoney() + amount);
else
{
@@ -26815,7 +26816,7 @@ void Player::RefundItem(Item* item)
SendItemRefundResult(item, iece, 0);
- uint32 moneyRefund = item->GetPaidMoney(); // item-> will be invalidated in DestroyItem
+ uint64 moneyRefund = item->GetPaidMoney(); // item-> will be invalidated in DestroyItem
// Save all relevant data to DB to prevent desynchronisation exploits
SQLTransaction trans = CharacterDatabase.BeginTransaction();
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 4f3f270fdc6..cfb595fb1ac 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1286,7 +1286,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendNewItem(Item* item, uint32 quantity, bool received, bool created, bool broadcast = false);
bool BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot);
bool BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, uint32 currency, uint32 count);
- bool _StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int32 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore);
+ bool _StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int64 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore);
float GetReputationPriceDiscount(Creature const* creature) const;
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 23a7f1d884c..83c35e52133 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -174,7 +174,7 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const
stmt->setUInt8 (++index, m_bankTabId);
stmt->setUInt8 (++index, uint8(m_eventType));
stmt->setUInt64(++index, m_playerGuid);
- stmt->setUInt32(++index, m_itemOrMoney);
+ stmt->setUInt64(++index, m_itemOrMoney);
stmt->setUInt16(++index, m_itemStackCount);
stmt->setUInt8 (++index, m_destTabId);
stmt->setUInt64(++index, m_timestamp);
@@ -330,9 +330,6 @@ void Guild::RankInfo::SetRights(uint32 rights)
void Guild::RankInfo::SetBankMoneyPerDay(uint32 money)
{
- if (m_rankId == GR_GUILDMASTER) // Prevent loss of leader rights
- money = uint32(GUILD_WITHDRAW_MONEY_UNLIMITED);
-
if (m_bankMoneyPerDay == money)
return;
@@ -522,13 +519,14 @@ Guild::Member::Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId
m_logoutTime(::time(nullptr)),
m_accountId(0),
m_rankId(rankId),
+ m_bankWithdrawMoney(0),
m_achievementPoints(0),
m_totalActivity(0),
m_weekActivity(0),
m_totalReputation(0),
m_weekReputation(0)
{
- memset(m_bankWithdraw, 0, (GUILD_BANK_MAX_TABS + 1) * sizeof(int32));
+ memset(m_bankWithdraw, 0, (GUILD_BANK_MAX_TABS) * sizeof(uint32));
}
// Member
@@ -613,9 +611,11 @@ bool Guild::Member::LoadFromDB(Field* fields)
m_publicNote = fields[3].GetString();
m_officerNote = fields[4].GetString();
- for (uint8 i = 0; i <= GUILD_BANK_MAX_TABS; ++i)
+ for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; ++i)
m_bankWithdraw[i] = fields[5 + i].GetUInt32();
+ m_bankWithdrawMoney = fields[13].GetUInt64();
+
SetStats(fields[14].GetString(),
fields[15].GetUInt8(), // characters.level
fields[16].GetUInt8(), // characters.class
@@ -658,16 +658,14 @@ bool Guild::Member::CheckStats() const
return true;
}
-// Decreases amount of money/slots left for today.
-// If (tabId == GUILD_BANK_MAX_TABS) decrease money amount.
-// Otherwise decrease remaining items amount for specified tab.
-void Guild::Member::UpdateBankWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount)
+// Decreases amount of slots left for today.
+void Guild::Member::UpdateBankTabWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount)
{
m_bankWithdraw[tabId] += amount;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW_TABS);
stmt->setUInt64(0, m_guid.GetCounter());
- for (uint8 i = 0; i <= GUILD_BANK_MAX_TABS;)
+ for (uint8 i = 0; i < GUILD_BANK_MAX_TABS;)
{
uint32 withdraw = m_bankWithdraw[i++];
stmt->setUInt32(i, withdraw);
@@ -676,11 +674,24 @@ void Guild::Member::UpdateBankWithdrawValue(SQLTransaction& trans, uint8 tabId,
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
+// Decreases amount of money left for today.
+void Guild::Member::UpdateBankMoneyWithdrawValue(SQLTransaction& trans, uint64 amount)
+{
+ m_bankWithdrawMoney += amount;
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_MEMBER_WITHDRAW_MONEY);
+ stmt->setUInt64(0, m_guid.GetCounter());
+ stmt->setUInt64(1, m_bankWithdrawMoney);
+ CharacterDatabase.ExecuteOrAppend(trans, stmt);
+}
+
void Guild::Member::ResetValues(bool weekly /* = false*/)
{
- for (uint8 tabId = 0; tabId <= GUILD_BANK_MAX_TABS; ++tabId)
+ for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
m_bankWithdraw[tabId] = 0;
+ m_bankWithdrawMoney = 0;
+
if (weekly)
{
m_weekActivity = 0;
@@ -698,18 +709,6 @@ Player* Guild::Member::FindConnectedPlayer() const
return ObjectAccessor::FindConnectedPlayer(m_guid);
}
-// Get amount of money/slots left for today.
-// If (tabId == GUILD_BANK_MAX_TABS) return money amount.
-// Otherwise return remaining items amount for specified tab.
-int32 Guild::Member::GetBankWithdrawValue(uint8 tabId) const
-{
- // Guild master has unlimited amount.
- if (IsRank(GR_GUILDMASTER))
- return static_cast<int32>(tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED);
-
- return m_bankWithdraw[tabId];
-}
-
// EmblemInfo
void EmblemInfo::ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet)
{
@@ -1394,7 +1393,7 @@ void Guild::SendGuildRankInfo(WorldSession* session) const
rankData.RankID = uint32(rankInfo->GetId());
rankData.RankOrder = uint32(i);
rankData.Flags = rankInfo->GetRights();
- rankData.WithdrawGoldLimit = uint32(rankInfo->GetBankMoneyPerDay());
+ rankData.WithdrawGoldLimit = rankInfo->GetBankMoneyPerDay();
rankData.RankName = rankInfo->GetName();
for (uint8 j = 0; j < GUILD_BANK_MAX_TABS; ++j)
@@ -1908,6 +1907,11 @@ void Guild::HandleRemoveRank(WorldSession* session, uint8 rankId)
void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow /*=false*/)
{
+ // guild bank cannot have more than MAX_MONEY_AMOUNT
+ amount = std::min(amount, MAX_MONEY_AMOUNT - m_bankMoney);
+ if (!amount)
+ return;
+
Player* player = session->GetPlayer();
// Call script after validation and before money transfer.
@@ -1937,7 +1941,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool
bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair)
{
// clamp amount to MAX_MONEY_AMOUNT, Players can't hold more than that anyway
- amount = std::min(amount, uint64(MAX_MONEY_AMOUNT));
+ amount = std::min(amount, MAX_MONEY_AMOUNT);
if (m_bankMoney < amount) // Not enough money in bank
return false;
@@ -1948,7 +1952,10 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool
if (!member)
return false;
- if (uint64(_GetMemberRemainingMoney(member)) < amount) // Check if we have enough slot/money today
+ if (!_HasRankRight(player, repair ? GR_RIGHT_WITHDRAW_REPAIR : GR_RIGHT_WITHDRAW_GOLD))
+ return false;
+
+ if (_GetMemberRemainingMoney(member) < int64(amount)) // Check if we have enough slot/money today
return false;
// Call script after validation and before money transfer.
@@ -1965,7 +1972,7 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool
}
// Update remaining money amount
- member->UpdateBankWithdrawValue(trans, GUILD_BANK_MAX_TABS, amount);
+ member->UpdateBankMoneyWithdrawValue(trans, amount);
// Remove money from bank
_ModifyBankMoney(trans, amount, false);
@@ -2127,7 +2134,7 @@ void Guild::SendPermissions(WorldSession* session) const
WorldPackets::Guild::GuildPermissionsQueryResults queryResult;
queryResult.RankID = rankId;
- queryResult.WithdrawGoldLimit = _GetMemberRemainingMoney(member);
+ queryResult.WithdrawGoldLimit = int32(_GetRankBankMoneyPerDay(rankId));
queryResult.Flags = _GetRankRights(rankId);
queryResult.NumTabs = _GetPurchasedTabsSize();
queryResult.Tab.reserve(GUILD_BANK_MAX_TABS);
@@ -2150,13 +2157,13 @@ void Guild::SendMoneyInfo(WorldSession* session) const
if (!member)
return;
- int32 amount = _GetMemberRemainingMoney(member);
+ int64 amount = _GetMemberRemainingMoney(member);
WorldPackets::Guild::GuildBankRemainingWithdrawMoney packet;
- packet.RemainingWithdrawMoney = int64(amount);
+ packet.RemainingWithdrawMoney = amount;
session->SendPacket(packet.Write());
- TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_MONEY_WITHDRAWN [%s] Money: %u", session->GetPlayerInfo().c_str(), amount);
+ TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_MONEY_WITHDRAWN [%s] Money: " SI64FMTD, session->GetPlayerInfo().c_str(), amount);
}
void Guild::SendLoginInfo(WorldSession* session)
@@ -2973,7 +2980,7 @@ inline uint32 Guild::_GetRankRights(uint8 rankId) const
return 0;
}
-inline int32 Guild::_GetRankBankMoneyPerDay(uint8 rankId) const
+inline uint32 Guild::_GetRankBankMoneyPerDay(uint8 rankId) const
{
if (const RankInfo* rankInfo = GetRankInfo(rankId))
return rankInfo->GetBankMoneyPerDay();
@@ -3004,7 +3011,7 @@ inline int32 Guild::_GetMemberRemainingSlots(Member const* member, uint8 tabId)
return static_cast<int32>(GUILD_WITHDRAW_SLOT_UNLIMITED);
if ((_GetRankBankTabRights(rankId, tabId) & GUILD_BANK_RIGHT_VIEW_TAB) != 0)
{
- int32 remaining = _GetRankBankTabSlotsPerDay(rankId, tabId) - member->GetBankWithdrawValue(tabId);
+ int32 remaining = _GetRankBankTabSlotsPerDay(rankId, tabId) - member->GetBankTabWithdrawValue(tabId);
if (remaining > 0)
return remaining;
}
@@ -3012,17 +3019,17 @@ inline int32 Guild::_GetMemberRemainingSlots(Member const* member, uint8 tabId)
return 0;
}
-inline int32 Guild::_GetMemberRemainingMoney(Member const* member) const
+inline int64 Guild::_GetMemberRemainingMoney(Member const* member) const
{
if (member)
{
uint8 rankId = member->GetRankId();
if (rankId == GR_GUILDMASTER)
- return static_cast<int32>(GUILD_WITHDRAW_MONEY_UNLIMITED);
+ return std::numeric_limits<int64>::max();
if ((_GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0)
{
- int32 remaining = _GetRankBankMoneyPerDay(rankId) - member->GetBankWithdrawValue(GUILD_BANK_MAX_TABS);
+ int64 remaining = (int64(_GetRankBankMoneyPerDay(rankId)) * GOLD) - member->GetBankMoneyWithdrawValue();
if (remaining > 0)
return remaining;
}
@@ -3033,12 +3040,7 @@ inline int32 Guild::_GetMemberRemainingMoney(Member const* member) const
inline void Guild::_UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId)
{
if (Member* member = GetMember(guid))
- {
- uint8 rankId = member->GetRankId();
- if (rankId != GR_GUILDMASTER
- && member->GetBankWithdrawValue(tabId) < _GetRankBankTabSlotsPerDay(rankId, tabId))
- member->UpdateBankWithdrawValue(trans, tabId, 1);
- }
+ member->UpdateBankTabWithdrawValue(trans, tabId, 1);
}
inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const
@@ -3281,7 +3283,7 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const
if (_MemberHasTabRights(itr->second->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
if (Player* player = itr->second->FindPlayer())
{
- packet.WithdrawalsRemaining = int32(_GetMemberRemainingSlots(itr->second, tabId));
+ packet.WithdrawalsRemaining = _GetMemberRemainingSlots(itr->second, tabId);
player->GetSession()->SendPacket(packet.Write());
}
}
@@ -3295,8 +3297,8 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) co
WorldPackets::Guild::GuildBankQueryResults packet;
- packet.Money = uint64(m_bankMoney);
- packet.WithdrawalsRemaining = int32(_GetMemberRemainingSlots(member, tabId));
+ packet.Money = m_bankMoney;
+ packet.WithdrawalsRemaining = _GetMemberRemainingSlots(member, tabId);
packet.Tab = int32(tabId);
packet.FullUpdate = fullUpdate;
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index be20db3b203..1bb762440e3 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -379,8 +379,10 @@ private:
inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; }
inline bool IsSamePlayer(ObjectGuid guid) const { return m_guid == guid; }
- void UpdateBankWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount);
- int32 GetBankWithdrawValue(uint8 tabId) const;
+ void UpdateBankTabWithdrawValue(SQLTransaction& trans, uint8 tabId, uint32 amount);
+ void UpdateBankMoneyWithdrawValue(SQLTransaction& trans, uint64 amount);
+ uint32 GetBankTabWithdrawValue(uint8 tabId) const { return m_bankWithdraw[tabId]; };
+ uint64 GetBankMoneyWithdrawValue() const { return m_bankWithdrawMoney; };
void ResetValues(bool weekly = false);
Player* FindPlayer() const;
@@ -405,7 +407,8 @@ private:
std::set<uint32> m_trackedCriteriaIds;
- int32 m_bankWithdraw[GUILD_BANK_MAX_TABS + 1];
+ uint32 m_bankWithdraw[GUILD_BANK_MAX_TABS];
+ uint64 m_bankWithdrawMoney;
uint32 m_achievementPoints;
uint64 m_totalActivity;
uint64 m_weekActivity;
@@ -560,8 +563,7 @@ private:
RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) :
- m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights),
- m_bankMoneyPerDay(rankId != GR_GUILDMASTER ? money : GUILD_WITHDRAW_MONEY_UNLIMITED) { }
+ m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights), m_bankMoneyPerDay(money) { }
void LoadFromDB(Field* fields);
void SaveToDB(SQLTransaction& trans) const;
@@ -574,7 +576,10 @@ private:
uint32 GetRights() const { return m_rights; }
void SetRights(uint32 rights);
- int32 GetBankMoneyPerDay() const { return m_bankMoneyPerDay; }
+ uint32 GetBankMoneyPerDay() const
+ {
+ return m_rankId != GR_GUILDMASTER ? m_bankMoneyPerDay : GUILD_WITHDRAW_MONEY_UNLIMITED;
+ }
void SetBankMoneyPerDay(uint32 money);
@@ -929,12 +934,12 @@ private:
void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
int8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const;
uint32 _GetRankRights(uint8 rankId) const;
- int32 _GetRankBankMoneyPerDay(uint8 rankId) const;
+ uint32 _GetRankBankMoneyPerDay(uint8 rankId) const;
int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const;
std::string _GetRankName(uint8 rankId) const;
int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const;
- int32 _GetMemberRemainingMoney(Member const* member) const;
+ int64 _GetMemberRemainingMoney(Member const* member) const;
void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId);
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const;
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 52eeea3d1f0..dc846cc10a7 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -223,8 +223,8 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell
uint32 auctionTime = uint32(packet.RunTime * sWorld->getRate(RATE_AUCTION_TIME));
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());
- uint32 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, packet.RunTime, item, finalCount);
- if (!_player->HasEnoughMoney((uint64)deposit))
+ uint64 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, packet.RunTime, item, finalCount);
+ if (!_player->HasEnoughMoney(deposit))
{
SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_NOT_ENOUGHT_MONEY);
return;
@@ -440,7 +440,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_AUCTION_BID);
stmt->setUInt64(0, auction->bidder);
- stmt->setUInt32(1, auction->bid);
+ stmt->setUInt64(1, auction->bid);
stmt->setUInt32(2, auction->Id);
trans->Append(stmt);
@@ -511,8 +511,8 @@ void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRe
{
if (auction->bidder) // If we have a bidder, we have to send him the money he paid
{
- uint32 auctionCut = auction->GetAuctionCut();
- if (!player->HasEnoughMoney((uint64)auctionCut)) //player doesn't have enough money, maybe message needed
+ uint64 auctionCut = auction->GetAuctionCut();
+ if (!player->HasEnoughMoney(auctionCut)) //player doesn't have enough money, maybe message needed
return;
sAuctionMgr->SendAuctionCancelledToBidderMail(auction, trans);
player->ModifyMoney(-int64(auctionCut));
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 3f7aae6f91a..0e14a16d415 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -445,6 +445,16 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet)
{
if (pProto->GetSellPrice() > 0)
{
+ uint64 money = uint64(pProto->GetSellPrice()) * packet.Amount;
+
+ if (!_player->ModifyMoney(money)) // ensure player doesn't exceed gold limit
+ {
+ _player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, packet.ItemGUID);
+ return;
+ }
+
+ _player->UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_VENDORS, money);
+
if (packet.Amount < pItem->GetCount()) // need split items
{
Item* pNewItem = pItem->CloneItem(packet.Amount, _player);
@@ -472,10 +482,6 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet)
RemoveItemFromUpdateQueueOf(pItem, _player);
_player->AddItemToBuyBackSlot(pItem);
}
-
- uint32 money = pProto->GetSellPrice() * packet.Amount;
- _player->ModifyMoney(money);
- _player->UpdateCriteria(CRITERIA_TYPE_MONEY_FROM_VENDORS, money);
}
else
_player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, packet.ItemGUID);
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 73423256893..b0c473091b4 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -456,7 +456,7 @@ void WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet)
}
// prevent cheating with skip client money check
- if (!player->HasEnoughMoney(uint64(m->COD)))
+ if (!player->HasEnoughMoney(m->COD))
{
player->SendMailResult(packet.MailID, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);
return;
@@ -509,7 +509,7 @@ void WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet)
.SendMailTo(trans, MailReceiver(receiver, m->sender), MailSender(MAIL_NORMAL, m->receiver), MAIL_CHECK_MASK_COD_PAYMENT);
}
- player->ModifyMoney(-int32(m->COD));
+ player->ModifyMoney(-int64(m->COD));
}
m->COD = 0;
m->state = MAIL_STATE_CHANGED;
diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp
index ea79a4a67f9..93be14c374c 100644
--- a/src/server/game/Handlers/TradeHandler.cpp
+++ b/src/server/game/Handlers/TradeHandler.cpp
@@ -285,7 +285,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
return;
}
- if (_player->GetMoney() >= uint64(MAX_MONEY_AMOUNT) - his_trade->GetMoney())
+ if (_player->GetMoney() > MAX_MONEY_AMOUNT - his_trade->GetMoney())
{
info.Status = TRADE_STATUS_FAILED;
info.BagResult = EQUIP_ERR_TOO_MUCH_GOLD;
@@ -294,7 +294,7 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc
return;
}
- if (trader->GetMoney() >= uint64(MAX_MONEY_AMOUNT) - my_trade->GetMoney())
+ if (trader->GetMoney() > MAX_MONEY_AMOUNT - my_trade->GetMoney())
{
info.Status = TRADE_STATUS_FAILED;
info.BagResult = EQUIP_ERR_TOO_MUCH_GOLD;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 1b15c75b08f..47fa1cb9ea2 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -905,7 +905,7 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_START_PLAYER_MONEY] = sConfigMgr->GetIntDefault("StartPlayerMoney", 0);
if (int32(m_int_configs[CONFIG_START_PLAYER_MONEY]) < 0)
{
- TC_LOG_ERROR("server.loading", "StartPlayerMoney (%i) must be in range 0.." UI64FMTD ". Set to %u.", m_int_configs[CONFIG_START_PLAYER_MONEY], uint64(MAX_MONEY_AMOUNT), 0);
+ TC_LOG_ERROR("server.loading", "StartPlayerMoney (%i) must be in range 0.." UI64FMTD ". Set to %u.", m_int_configs[CONFIG_START_PLAYER_MONEY], MAX_MONEY_AMOUNT, 0);
m_int_configs[CONFIG_START_PLAYER_MONEY] = 0;
}
else if (m_int_configs[CONFIG_START_PLAYER_MONEY] > 0x7FFFFFFF-1) // TODO: (See MAX_MONEY_AMOUNT)
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index 53faf7f84f4..01c4802c9f0 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -516,7 +516,7 @@ public:
std::string subject = queryFields[5].GetString();
uint64 deliverTime = queryFields[6].GetUInt32();
uint64 expireTime = queryFields[7].GetUInt32();
- uint32 money = queryFields[8].GetUInt32();
+ uint64 money = queryFields[8].GetUInt64();
uint8 hasItem = queryFields[9].GetUInt8();
uint32 gold = money / GOLD;
uint32 silv = (money % GOLD) / SILVER;
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index f948869e838..7249a1ebb30 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1688,7 +1688,7 @@ public:
uint32 totalPlayerTime = 0;
uint8 level = 0;
std::string alive = handler->GetTrinityString(LANG_ERROR);
- uint32 money = 0;
+ uint64 money = 0;
uint32 xp = 0;
uint32 xptotal = 0;
@@ -1747,7 +1747,7 @@ public:
Field* fields = result->Fetch();
totalPlayerTime = fields[0].GetUInt32();
level = fields[1].GetUInt8();
- money = fields[2].GetUInt32();
+ money = fields[2].GetUInt64();
accId = fields[3].GetUInt32();
raceid = fields[4].GetUInt8();
classid = fields[5].GetUInt8();
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index a026a21314f..69eba057f6e 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -598,8 +598,7 @@ public:
if (moneyToAdd >= int64(MAX_MONEY_AMOUNT))
moneyToAdd = MAX_MONEY_AMOUNT;
- if (targetMoney >= uint64(MAX_MONEY_AMOUNT) - moneyToAdd)
- moneyToAdd -= targetMoney;
+ moneyToAdd = std::min(moneyToAdd, int64(MAX_MONEY_AMOUNT - targetMoney));
target->ModifyMoney(moneyToAdd);
}
diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp
index 2c36e856772..ead9d9a7df0 100644
--- a/src/server/scripts/Commands/cs_send.cpp
+++ b/src/server/scripts/Commands/cs_send.cpp
@@ -230,7 +230,7 @@ public:
return false;
char* moneyStr = strtok(NULL, "");
- int32 money = moneyStr ? atoi(moneyStr) : 0;
+ int64 money = moneyStr ? atoll(moneyStr) : 0;
if (money <= 0)
return false;