diff options
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; |
