· 6 years ago · Dec 11, 2019, 02:44 AM
1From c97ce9e201e9b7bb204d10c7ffe0a39b40112e6c Mon Sep 17 00:00:00 2001
2From: LordPsyan <realmsofwarcraft@gmail.com>
3Date: Thu, 29 Oct 2015 21:26:31 -0500
4Subject: [PATCH] 2015_10_29-VIP
5
6---
7 sql/TrinityCore-Patches/VIP/account_premium.sql | 22 ++++++
8 src/server/authserver/Server/AuthSession.cpp | 3 +
9 .../Database/Implementation/LoginDatabase.cpp | 5 +-
10 .../Database/Implementation/LoginDatabase.h | 3 +
11 src/server/game/Entities/Player/Player.cpp | 9 ++-
12 src/server/game/Miscellaneous/Formulas.h | 6 +-
13 src/server/game/Miscellaneous/Language.h | 2 +-
14 src/server/game/Reputation/ReputationMgr.cpp | 4 +
15 src/server/game/Scripting/ScriptLoader.cpp | 4 +-
16 src/server/game/Server/WorldSession.cpp | 3 +-
17 src/server/game/Server/WorldSession.h | 4 +-
18 src/server/game/Server/WorldSocket.cpp | 13 +++-
19 src/server/game/World/World.cpp | 9 +++
20 src/server/game/World/World.h | 9 +++
21 src/server/scripts/Custom/cs_premium.cpp | 88 ++++++++++++++++++++++
22 src/server/worldserver/worldserver.conf.dist | 16 ++++
23 16 files changed, 190 insertions(+), 10 deletions(-)
24 create mode 100644 sql/TrinityCore-Patches/VIP/account_premium.sql
25 create mode 100644 src/server/scripts/Custom/cs_premium.cpp
26
27diff --git a/sql/TrinityCore-Patches/VIP/account_premium.sql b/sql/TrinityCore-Patches/VIP/account_premium.sql
28new file mode 100644
29index 0000000..770380c
30--- /dev/null
31+++ b/sql/TrinityCore-Patches/VIP/account_premium.sql
32@@ -0,0 +1,22 @@
33+CREATE TABLE IF NOT EXISTS `auth`.`account_premium` (
34+ `id` int(11) NOT NULL DEFAULT '0' COMMENT 'Account id',
35+ `setdate` int(4) NOT NULL DEFAULT '0',
36+ `unsetdate` int(4) NOT NULL DEFAULT '0',
37+ `premium_type` tinyint(4) unsigned NOT NULL DEFAULT '1',
38+ `active` tinyint(4) NOT NULL DEFAULT '1',
39+ PRIMARY KEY (`id`),
40+ KEY `active` (`active`),
41+ KEY `setdate` (`setdate`),
42+ KEY `unsetdate` (`unsetdate`)
43+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
44+
45+
46+INSERT INTO `auth`.`rbac_permissions` (`id`, `name`) VALUES
47+(999, 'Command: vip');
48+
49+INSERT INTO `auth`.`rbac_linked_permissions` (`id`, `linkedId`) VALUES
50+(195, 999);
51+
52+INSERT INTO `world`.`command` (`name`, `permission`, `help`) VALUES
53+('vip bank', 999, 'Syntax: .vip bank'),
54+('vip mail', 999, 'Syntax: .vip mail');
55\ No newline at end of file
56diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp
57index 28819b8..9b87c0d 100644
58--- a/src/server/authserver/Server/AuthSession.cpp
59+++ b/src/server/authserver/Server/AuthSession.cpp
60@@ -297,6 +297,9 @@ bool AuthSession::HandleLogonChallenge()
61 //set expired bans to inactive
62 LoginDatabase.DirectExecute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS));
63
64+ //set expired premium to inactive
65+ LoginDatabase.DirectExecute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_PREMIUM));
66+
67 // If the account is banned, reject the logon attempt
68 stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED);
69 stmt->setUInt32(0, fields[1].GetUInt32());
70diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp
71index 8f0b506..2bdae15 100644
72--- a/src/server/database/Database/Implementation/LoginDatabase.cpp
73+++ b/src/server/database/Database/Implementation/LoginDatabase.cpp
74@@ -106,8 +106,11 @@ void LoginDatabaseConnection::DoPrepareStatements()
75 PrepareStatement(LOGIN_INS_CHAR_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
76 // 0: string, 1: string, 2: string // Complete name: "Login_Insert_Failed_Account_Login_due_password_IP_Logging"
77 PrepareStatement(LOGIN_INS_FALP_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES ((SELECT id FROM account WHERE username = ?), 0, 1, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC);
78- PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH);
79
80+ PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_PREMIUM, "UPDATE account_premium SET active = 0 WHERE unsetdate<=UNIX_TIMESTAMP() AND unsetdate<>setdate", CONNECTION_SYNCH);
81+ PrepareStatement(LOGIN_SEL_PREMIUM, "SELECT 1 FROM account_premium WHERE id = ? AND active = 1", CONNECTION_SYNCH);
82+
83+ PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH);
84 PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH);
85 PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC);
86 PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC);
87diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h
88index 79b7a53..00d053a 100644
89--- a/src/server/database/Database/Implementation/LoginDatabase.h
90+++ b/src/server/database/Database/Implementation/LoginDatabase.h
91@@ -110,6 +110,9 @@ enum LoginDatabaseStatements
92 LOGIN_INS_CHAR_IP_LOGGING,
93 LOGIN_INS_FALP_IP_LOGGING,
94
95+ LOGIN_UPD_EXPIRED_ACCOUNT_PREMIUM,
96+ LOGIN_SEL_PREMIUM,
97+
98 LOGIN_SEL_ACCOUNT_ACCESS_BY_ID,
99 LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS,
100 LOGIN_INS_RBAC_ACCOUNT_PERMISSION,
101diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
102index 13a720f..cca752f 100644
103--- a/src/server/game/Entities/Player/Player.cpp
104+++ b/src/server/game/Entities/Player/Player.cpp
105@@ -6827,6 +6827,9 @@ void Player::CheckAreaExploreAndOutdoor()
106 XP = uint32(sObjectMgr->GetBaseXP(areaEntry->area_level)*sWorld->getRate(RATE_XP_EXPLORE));
107 }
108
109+ if(GetSession()->IsPremium())
110+ XP *= sWorld->getRate(RATE_XP_EXPLORE_PREMIUM);
111+
112 GiveXP(XP, NULL);
113 SendExplorationExperience(area, XP);
114 }
115@@ -7196,7 +7199,8 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto
116 // 34
117 // 35
118 // 36
119- // 37
120+ if(GetSession()->IsPremium())
121+ honor_f *= sWorld->getRate(RATE_HONOR_PREMIUM);
122 // 38
123 // 39
124 // 40
125@@ -15337,7 +15341,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
126 // 49
127 // 50
128 // 51
129- // 52
130+ if (GetSession()->IsPremium())
131+ XP *= sWorld->getRate(RATE_XP_QUEST_PREMIUM);
132 // 53
133 // 54
134 // 55
135diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
136index f8f6fc4..b29009d 100644
137--- a/src/server/game/Miscellaneous/Formulas.h
138+++ b/src/server/game/Miscellaneous/Formulas.h
139@@ -27,7 +27,7 @@
140 // Prepatch by LordPsyan
141 // 01
142 // 02
143-// 03
144+#include "WorldSession.h"
145 // 04
146 // 05
147 // 06
148@@ -235,6 +235,10 @@ namespace Trinity
149 // End of prepatch
150 } else {
151 xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL);
152+
153+ if(player->GetSession()->IsPremium())
154+ xpMod *= sWorld->getRate(RATE_XP_KILL_PREMIUM);
155+
156 gain = uint32(gain * xpMod);
157 }
158 }
159diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
160index 7106320..85c9d84 100644
161--- a/src/server/game/Miscellaneous/Language.h
162+++ b/src/server/game/Miscellaneous/Language.h
163@@ -1206,7 +1206,7 @@ enum TrinityStrings
164 // 15
165 // 16
166 // 17
167- // 18
168+ LANG_PREMIUM_CANT_DO = 12009,
169 // 19
170 // 20
171 // Visit http://www.realmsofwarcraft.com/bb for forums and information
172diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
173index a4065fa..0ea904f 100644
174--- a/src/server/game/Reputation/ReputationMgr.cpp
175+++ b/src/server/game/Reputation/ReputationMgr.cpp
176@@ -367,6 +367,10 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
177 {
178 // int32 *= float cause one point loss?
179 standing = int32(floor((float)standing * sWorld->getRate(RATE_REPUTATION_GAIN) + 0.5f));
180+
181+ if(_player->GetSession()->IsPremium())
182+ standing *= sWorld->getRate(RATE_REPUTATION_PREMIUM);
183+
184 standing += itr->second.Standing + BaseRep;
185 }
186
187diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
188index fff6dd6..ee66b32 100644
189--- a/src/server/game/Scripting/ScriptLoader.cpp
190+++ b/src/server/game/Scripting/ScriptLoader.cpp
191@@ -1482,7 +1482,7 @@ void AddBattlegroundScripts()
192 // start63
193 // start64
194 // start65
195-// start66
196+void AddSC_premium_commandscript();
197 // start67
198 // start68
199 // start69
200@@ -1608,7 +1608,7 @@ void AddCustomScripts()
201 // end63
202 // end64
203 // end65
204-// end66
205+ AddSC_premium_commandscript();
206 // end67
207 // end68
208 // end69
209diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
210index c99346c..113e835 100644
211--- a/src/server/game/Server/WorldSession.cpp
212+++ b/src/server/game/Server/WorldSession.cpp
213@@ -95,7 +95,7 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
214 }
215
216 /// WorldSession constructor
217-WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
218+WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, bool ispremium, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
219 m_muteTime(mute_time),
220 m_timeOutTime(0),
221 AntiDOS(this),
222@@ -103,6 +103,7 @@ WorldSession::WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, Account
223 _player(NULL),
224 m_Socket(sock),
225 _security(sec),
226+ _ispremium(ispremium),
227 _accountId(id),
228 m_expansion(expansion),
229 _warden(NULL),
230diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
231index 6b1279e..f1ab205 100644
232--- a/src/server/game/Server/WorldSession.h
233+++ b/src/server/game/Server/WorldSession.h
234@@ -249,7 +249,7 @@ struct PacketCounter
235 class WorldSession
236 {
237 public:
238- WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
239+ WorldSession(uint32 id, std::shared_ptr<WorldSocket> sock, AccountTypes sec, bool ispremium, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
240 ~WorldSession();
241
242 bool PlayerLoading() const { return m_playerLoading; }
243@@ -282,6 +282,7 @@ class WorldSession
244 void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
245
246 AccountTypes GetSecurity() const { return _security; }
247+ bool IsPremium() const { return _ispremium; }
248 uint32 GetAccountId() const { return _accountId; }
249 Player* GetPlayer() const { return _player; }
250 std::string const& GetPlayerName() const;
251@@ -1035,6 +1036,7 @@ class WorldSession
252 AccountTypes _security;
253 uint32 _accountId;
254 uint8 m_expansion;
255+ bool _ispremium;
256
257 typedef std::list<AddonInfo> AddonsList;
258
259diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
260index 066a4e5..03f87f3 100644
261--- a/src/server/game/Server/WorldSocket.cpp
262+++ b/src/server/game/Server/WorldSocket.cpp
263@@ -262,6 +262,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
264 uint32 id;
265 LocaleConstant locale;
266 std::string account;
267+ bool isPremium = false;
268 SHA1Hash sha;
269 uint32 clientBuild;
270 uint32 serverId, loginServerType, region, battlegroup, realmIndex;
271@@ -447,6 +448,16 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
272 return;
273 }
274
275+ // Check premium
276+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PREMIUM);
277+ stmt->setUInt32(0, id);
278+ PreparedQueryResult premresult = LoginDatabase.Query(stmt);
279+
280+ if (premresult)
281+ {
282+ isPremium = true;
283+ }
284+
285 // Check locked state for server
286 AccountTypes allowedAccountType = sWorld->GetPlayerSecurityLimit();
287 TC_LOG_DEBUG("network", "Allowed Level: %u Player Level %u", allowedAccountType, AccountTypes(security));
288@@ -486,7 +497,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
289 sScriptMgr->OnAccountLogin(id);
290
291 _authed = true;
292- _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter);
293+ _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), isPremium, expansion, mutetime, locale, recruiter, isRecruiter);
294 _worldSession->LoadGlobalAccountData();
295 _worldSession->LoadTutorialsData();
296 _worldSession->ReadAddonsInfo(recvPacket);
297diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
298index 028ed43..8a8fa37 100644
299--- a/src/server/game/World/World.cpp
300+++ b/src/server/game/World/World.cpp
301@@ -482,6 +482,15 @@ void World::LoadConfigSettings(bool reload)
302 rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.BattlegroundKill", 1.0f);
303 rate_values[RATE_XP_QUEST] = sConfigMgr->GetFloatDefault("Rate.XP.Quest", 1.0f);
304 rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetFloatDefault("Rate.XP.Explore", 1.0f);
305+
306+ rate_values[RATE_XP_KILL_PREMIUM] = sConfigMgr->GetFloatDefault("Rate.XP.Kill.Premium", 1.0f);
307+ rate_values[RATE_XP_QUEST_PREMIUM] = sConfigMgr->GetFloatDefault("Rate.XP.Quest.Premium", 1.0f);
308+ rate_values[RATE_XP_EXPLORE_PREMIUM] = sConfigMgr->GetFloatDefault("Rate.XP.Explore.Premium", 1.0f);
309+ rate_values[RATE_REPUTATION_PREMIUM] = sConfigMgr->GetFloatDefault("Rate.Reputation.Premium", 1.0f);
310+ rate_values[RATE_HONOR_PREMIUM] = sConfigMgr->GetFloatDefault("Rate.Honor.Premium", 1.0f);
311+ m_bool_configs[COMMAND_BANK_PREMIUM] = sConfigMgr->GetFloatDefault("Command.Bank.Premium", false);
312+ m_bool_configs[COMMAND_MAIL_PREMIUM] = sConfigMgr->GetFloatDefault("Command.Mail.Premium", false);
313+
314 rate_values[RATE_REPAIRCOST] = sConfigMgr->GetFloatDefault("Rate.RepairCost", 1.0f);
315 if (rate_values[RATE_REPAIRCOST] < 0.0f)
316 {
317diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
318index ccea34e..b7b0d5d 100644
319--- a/src/server/game/World/World.h
320+++ b/src/server/game/World/World.h
321@@ -97,6 +97,8 @@ enum WorldBoolConfigs
322 CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD,
323 CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION,
324 CONFIG_ALLOW_TWO_SIDE_TRADE,
325+ COMMAND_BANK_PREMIUM,
326+ COMMAND_MAIL_PREMIUM,
327 CONFIG_ALL_TAXI_PATHS,
328 CONFIG_INSTANT_TAXI,
329 CONFIG_INSTANCE_IGNORE_LEVEL,
330@@ -470,6 +472,13 @@ enum Rates
331 RATE_XP_BG_KILL,
332 RATE_XP_QUEST,
333 RATE_XP_EXPLORE,
334+
335+ RATE_XP_KILL_PREMIUM,
336+ RATE_XP_QUEST_PREMIUM,
337+ RATE_XP_EXPLORE_PREMIUM,
338+ RATE_REPUTATION_PREMIUM,
339+ RATE_HONOR_PREMIUM,
340+
341 RATE_REPAIRCOST,
342 RATE_REPUTATION_GAIN,
343 RATE_REPUTATION_LOWLEVEL_KILL,
344diff --git a/src/server/scripts/Custom/cs_premium.cpp b/src/server/scripts/Custom/cs_premium.cpp
345new file mode 100644
346index 0000000..f85ea26
347--- /dev/null
348+++ b/src/server/scripts/Custom/cs_premium.cpp
349@@ -0,0 +1,88 @@
350+#include "Language.h"
351+#include "World.h"
352+//#include "AuctionHouseMgr.h"
353+
354+class premium_commandscript : public CommandScript
355+{
356+public:
357+ premium_commandscript() : CommandScript("premium_commandscript") { }
358+
359+ std::vector<ChatCommand> GetCommands() const override
360+ {
361+ static std::vector<ChatCommand> premiumCommandTable =
362+ {
363+ { "bank", SEC_PLAYER, false, &HandlePremiumBankCommand, "" },
364+ { "mail", SEC_PLAYER, false, &HandlePremiumMailCommand, "" },
365+ //{ "auc", SEC_PLAYER, false, &HandlePremiumAuctionCommand, "", NULL },
366+ };
367+
368+ static std::vector<ChatCommand> commandTable =
369+ {
370+ { "vip", SEC_PLAYER, false, NULL, "", premiumCommandTable },
371+ };
372+
373+ return commandTable;
374+ }
375+
376+ static bool HandlePremiumBankCommand(ChatHandler* handler, char const* /*args*/)
377+ {
378+ Player *player = handler->GetSession()->GetPlayer();
379+ if (player->GetSession()->IsPremium() && sWorld->getBoolConfig(COMMAND_BANK_PREMIUM))
380+ {
381+ //Different Checks
382+ if (player->IsInCombat() || player->IsInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
383+ {
384+ handler->SendSysMessage(LANG_PREMIUM_CANT_DO);
385+ handler->SetSentErrorMessage(true);
386+ return false;
387+ }
388+
389+ handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID());
390+ }
391+ return true;
392+ }
393+
394+ static bool HandlePremiumMailCommand(ChatHandler* handler, char const* /*args*/)
395+ {
396+ Player* player = handler->GetSession()->GetPlayer();
397+ if (player->GetSession()->IsPremium() && sWorld->getBoolConfig(COMMAND_MAIL_PREMIUM))
398+ {
399+ //Different Checks
400+ if (player->IsInCombat() || player->IsInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
401+ {
402+ handler->SendSysMessage(LANG_PREMIUM_CANT_DO);
403+ handler->SetSentErrorMessage(true);
404+ return false;
405+ }
406+
407+ handler->GetSession()->SendShowMailBox(player->GetGUID());
408+ }
409+ return true;
410+ }
411+
412+ //static bool HandlePremiumAuctionCommand(ChatHandler* handler, char const* /*args*/)
413+ //{
414+ //Player* player = handler->GetSession()->GetPlayer();
415+ //if(player->GetSession()->IsPremium())
416+ //{
417+ //Different Checks
418+ //if(player->IsInCombat() || player->IsInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
419+ //{
420+ // handler->SendSysMessage(LANG_PREMIUM_CANT_DO);
421+ // handler->SetSentErrorMessage(true);
422+ // return false;
423+ //}
424+
425+ //handler->GetSession()->SendAuctionHello(player->GetGUID());
426+ //handler->GetSession()->SendAuctionHello(player->getFaction());
427+
428+ //}
429+ //return true;
430+ //}
431+
432+};
433+
434+void AddSC_premium_commandscript()
435+{
436+ new premium_commandscript();
437+}
438\ No newline at end of file
439diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
440index 8a7da8c..e0b1cea 100644
441--- a/src/server/worldserver/worldserver.conf.dist
442+++ b/src/server/worldserver/worldserver.conf.dist
443@@ -2592,6 +2592,22 @@ CharDelete.KeepDays = 30
444 #
445 ###################################################################################################
446
447+# Rate.XP.Kill.Premium
448+# Rate.XP.Quest.Premium
449+# Rate.XP.Explore.Premium
450+# Rate.Honor.Premium
451+# Rate.Reputation.Gain.Premium
452+# XP rates Premium modifier
453+# Default: 1
454+
455+Rate.XP.Kill.Premium = 1
456+Rate.XP.Quest.Premium = 1
457+Rate.XP.Explore.Premium = 1
458+Rate.Honor.Premium = 1
459+Rate.Reputation.Premium = 1
460+Command.Bank.Premium = 1
461+Command.Mail.Premium = 1
462+
463 ###################################################################################################
464 # CUSTOM SERVER OPTIONS
465 #
466--
4672.1.4