· 8 years ago · Feb 15, 2018, 02:30 PM
1From 33673de7872908237ad256fda2a6aca640fe7ccd Mon Sep 17 00:00:00 2001
2From: LordPsyan <realmsofwarcraft@gmail.com>
3Date: Thu, 15 Feb 2018 09:28:35 -0500
4Subject: [PATCH] Fake_Players
5
6---
7 .../Fake_Players/characters.fake_players.sql | 36 +++++++++++++++++++++
8 .../Fake_Players/world.fake_players.sql | 4 +++
9 src/server/game/Entities/Player/Player.cpp | 4 +++
10 src/server/game/Handlers/ChatHandler.cpp | 9 ++++++
11 src/server/game/Handlers/MiscHandler.cpp | 37 +++++++++++++++++++++-
12 src/server/game/Miscellaneous/Language.h | 2 +-
13 src/server/game/World/World.cpp | 1 +
14 src/server/game/World/World.h | 1 +
15 src/server/worldserver/worldserver.conf.dist | 8 +++++
16 9 files changed, 100 insertions(+), 2 deletions(-)
17 create mode 100644 sql/LordPsyan-Patches/Fake_Players/characters.fake_players.sql
18 create mode 100644 sql/LordPsyan-Patches/Fake_Players/world.fake_players.sql
19
20diff --git a/sql/LordPsyan-Patches/Fake_Players/characters.fake_players.sql b/sql/LordPsyan-Patches/Fake_Players/characters.fake_players.sql
21new file mode 100644
22index 0000000..b404528
23--- /dev/null
24+++ b/sql/LordPsyan-Patches/Fake_Players/characters.fake_players.sql
25@@ -0,0 +1,36 @@
26+/*
27+SQLyog Enterprise - MySQL GUI v8.18
28+MySQL - 5.1.66-0+squeeze1 : Database - lithathrad_characters
29+*********************************************************************
30+*/
31+
32+/*!40101 SET NAMES utf8 */;
33+
34+/*!40101 SET SQL_MODE=''*/;
35+
36+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
37+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
38+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
39+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
40+/*Table structure for table `characters_fake` */
41+
42+DROP TABLE IF EXISTS `characters_fake`;
43+
44+CREATE TABLE `characters_fake` (
45+ `name` varchar(36) NOT NULL,
46+ `race` mediumint(3) NOT NULL DEFAULT '0',
47+ `class` mediumint(3) NOT NULL DEFAULT '0',
48+ `level` mediumint(3) NOT NULL DEFAULT '0',
49+ `zone` mediumint(9) NOT NULL DEFAULT '0',
50+ `gender` mediumint(3) NOT NULL DEFAULT '0',
51+ `online` mediumint(3) NOT NULL DEFAULT '0'
52+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
53+
54+/*Data for the table `characters_fake` */
55+
56+insert into `characters_fake`(`name`,`race`,`class`,`level`,`zone`,`gender`,`online`) values ('Drikish',10,8,80,22,0,2),('Sovelis',1,1,75,11,0,2),('Cuddles',10,2,99,37,0,2),('Epiasdv',8,4,80,1,0,2),('Mac',5,4,80,44,0,2),('Tiesto',8,6,80,15,0,2),('Ihavfacebook',11,7,80,44,1,2),('Mimik',10,4,80,24,0,2),('Deadmau',5,4,99,36,0,2),('Smoosh',8,1,80,29,0,2),('Shadowcrest',4,4,80,24,1,2),('Lolol',4,5,75,30,1,2),('Prox',11,1,80,28,1,2),('Rovip',10,4,80,13,0,2),('Ryan',10,8,80,17,0,2),('Holysmite',1,2,80,24,0,2),('Airagon',10,2,80,36,0,2),('Fracture',5,1,80,4,0,2),('Supershen',10,2,80,14,1,2),('Jana',2,4,75,41,0,2),('Gamm',2,1,75,35,0,2),('Emoarchie',10,8,80,2,0,2),('Melia',10,2,75,4,1,2),('Balu',6,11,75,10,0,2),('Jabari',2,1,75,5,0,2),('Sinan',10,2,75,6,0,2),('Shisha',10,4,75,9,1,2),('Killbill',1,4,75,8,0,2),('Gaby',4,11,75,12,1,2),('Fallen',4,4,75,37,0,2),('Druidita',6,11,75,47,0,2),('Pigolo',6,11,75,22,0,2),('Saga',10,2,75,22,0,2),('Deadmask',10,2,75,41,0,2),('Assasincz',4,4,75,41,0,2),('Petracz',1,4,75,28,1,2),('Aleks',10,2,75,20,0,2),('Cazadormen',4,4,75,14,1,2),('Kireth',1,2,75,9,1,2),('Liesma',1,1,75,5,1,2),('Tyller',1,1,75,46,0,2),('Astrabutaz',1,2,75,13,0,2),('Carlita',7,8,75,26,1,2),('beanie',10,2,80,40,0,2),('Nergal',10,3,75,22,0,2),('Smikis',10,5,75,39,0,2),('Peperoma',11,2,75,30,0,2),('May',1,2,75,32,1,2),('Keyadis',8,7,75,47,0,2),('Preatorian',10,2,75,29,0,2),('Mitza',1,9,75,1,0,2),('Keedor',10,2,75,21,0,2),('Kekw',4,3,75,1,1,2),('Wark',1,2,75,42,0,2),('Barrabus',10,2,75,6,0,2),('Malodetehepy',4,11,75,1,0,2),('Dranati',10,2,75,40,0,2),('Sorin',2,1,75,36,0,2),('Resan',4,4,75,18,0,2),('Silverhilt',1,1,75,31,1,2),('Chirica',10,2,75,2,0,2),('Trias',10,8,75,16,0,2),('Prdo',5,1,75,22,0,2),('Guten',8,7,75,36,0,2),('Sonsia',4,3,75,48,1,2),('Smikiss',10,4,75,37,0,2),('Ledy',4,1,75,34,1,2),('Rymar',5,4,75,9,0,2),('Rokass',5,1,75,38,0,2),('Waisha',10,3,75,11,1,2),('Xenon',4,1,75,16,0,2),('Palanoski',1,2,75,6,0,2),('Helona',6,11,75,47,1,2),('Skalons',2,1,75,14,0,2),('Zazlock',5,9,75,31,0,2),('Zazk',6,7,75,20,0,2),('Ezekiel',10,9,75,12,0,2),('Deiv',10,8,75,1,0,2),('Crashwar',5,1,75,16,0,2),('Bandaid',5,5,75,28,0,2),('Hunterherbie',4,3,75,3,0,2),('Cheesebeard',3,1,90,4,0,2),('Phin',7,8,75,3,0,2),('Prig',10,5,75,48,0,2),('Eraevel',10,5,75,28,1,2),('Bourne',5,4,75,47,0,2),('Twoogi',5,8,75,48,0,2),('Devon',5,4,76,6,0,2),('Ledystar',1,2,75,29,1,2),('Frostie',10,8,75,25,1,2),('Kie',5,4,99,38,0,2),('Reios',1,2,75,16,0,2),('Zero',4,4,75,30,0,2),('Wuk',2,1,75,1,0,2),('Sylvaediir',4,3,75,21,0,2),('Kansetsu',11,2,75,10,0,2),('Makura',11,2,75,44,1,2),('Demonia',11,2,75,17,1,2),('Stonebull',6,11,75,50,0,2),('Marianus',10,2,75,50,0,2);
57+
58+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
59+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
60+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
61+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
62diff --git a/sql/LordPsyan-Patches/Fake_Players/world.fake_players.sql b/sql/LordPsyan-Patches/Fake_Players/world.fake_players.sql
63new file mode 100644
64index 0000000..1ba1eab
65--- /dev/null
66+++ b/sql/LordPsyan-Patches/Fake_Players/world.fake_players.sql
67@@ -0,0 +1,4 @@
68+DELETE FROM `trinity_string` WHERE `entry` = 10100;
69+
70+insert into `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) values
71+('10100','Message: \"Do not disturb\".',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Сообщение: \"Не беспокоить\".');
72diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
73index 6874c6a..8682e02 100644
74--- a/src/server/game/Entities/Player/Player.cpp
75+++ b/src/server/game/Entities/Player/Player.cpp
76@@ -1275,6 +1275,10 @@ void Player::Update(uint32 p_time)
77 // m_nextSave reset in SaveToDB call
78 SaveToDB();
79 TC_LOG_DEBUG("entities.player", "Player::Update: Player '%s' (%s) saved", GetName().c_str(), GetGUID().ToString().c_str());
80+ // If Fake WHO List system on then change player position with every SavePlayer Interval (usually 15min)
81+ if (sWorld->getBoolConfig(CONFIG_FAKE_WHO_LIST))
82+ CharacterDatabase.PExecute("UPDATE characters_fake SET zone = (FLOOR(50 * RAND()) + 1) WHERE online>1");
83+ CharacterDatabase.PExecute("UPDATE characters_fake SET level=level+1 WHERE online>1 AND level<5");
84 }
85 else
86 m_nextSave -= p_time;
87diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
88index 90aebd3..3de6c59 100644
89--- a/src/server/game/Handlers/ChatHandler.cpp
90+++ b/src/server/game/Handlers/ChatHandler.cpp
91@@ -301,8 +301,17 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
92 Player* receiver = ObjectAccessor::FindConnectedPlayerByName(to);
93 if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
94 {
95+ // If Fake WHO List system on then show player DND
96+ if (sWorld->getBoolConfig(CONFIG_FAKE_WHO_LIST))
97+ {
98+ sWorld->SendWorldText(LANG_NOT_WHISPER);
99+ return;
100+ }
101+ else
102+ {
103 SendPlayerNotFoundNotice(to);
104 return;
105+ }
106 }
107 if (!sender->IsGameMaster() && sender->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) && !receiver->IsInWhisperWhiteList(sender->GetGUID()))
108 {
109diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
110index 763dc7e..c8beaa8 100644
111--- a/src/server/game/Handlers/MiscHandler.cpp
112+++ b/src/server/game/Handlers/MiscHandler.cpp
113@@ -54,6 +54,7 @@
114 #include <cstdarg>
115 #include <zlib.h>
116
117+
118 void WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData)
119 {
120 TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_REPOP_REQUEST Message");
121@@ -345,7 +346,39 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
122 ++displayCount;
123 }
124
125- data.put(0, displayCount); // insert right count, count displayed
126+ if (sWorld->getBoolConfig(CONFIG_FAKE_WHO_LIST) && displayCount < 49)
127+ {
128+ // Fake players on WHO LIST 0, 1, 2, 3, 4, 5
129+ QueryResult result = CharacterDatabase.Query("SELECT name,race,class,level,zone,gender FROM characters_fake WHERE online>1 AND level > 3");
130+ if (result)
131+ {
132+ do
133+ {
134+ Field *fields = result->Fetch();
135+
136+ std::string pname = fields[0].GetString(); // player name
137+ std::string gname; // guild name
138+ uint32 lvl = fields[3].GetUInt32(); // player level
139+ uint32 class_ = fields[2].GetUInt32(); // player class
140+ uint32 race = fields[1].GetUInt32(); // player race
141+ uint32 pzoneid = fields[4].GetUInt32(); // player zone id
142+ uint8 gender = fields[5].GetUInt8(); // player gender
143+
144+ data << pname; // player name
145+ data << gname; // guild name
146+ data << uint32(lvl); // player level
147+ data << uint32(class_); // player class
148+ data << uint32(race); // player race
149+ data << uint8(gender); // player gender
150+ data << uint32(pzoneid); // player zone id
151+
152+ if ((++matchCount) == 49)
153+ break;
154+ } while (result->NextRow());
155+ }
156+ }
157+
158+ data.put(0, matchCount); // insert right count, count displayed
159 data.put(4, matchCount); // insert right count, count of matches
160
161 SendPacket(&data);
162@@ -503,6 +536,7 @@ void WorldSession::HandleStandStateChangeOpcode(WorldPacket& recvData)
163 _player->SetStandState(animstate);
164 }
165
166+
167 void WorldSession::HandleBugOpcode(WorldPacket& recvData)
168 {
169 uint32 suggestion, contentlen, typelen;
170@@ -1024,6 +1058,7 @@ void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recvData)
171
172 Player* player = ObjectAccessor::GetPlayer(*_player, guid);
173
174+
175 if (!player)
176 {
177 TC_LOG_DEBUG("network", "MSG_INSPECT_HONOR_STATS: No player found from %s", guid.ToString().c_str());
178diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
179index 588b4e9..ade5218 100644
180--- a/src/server/game/Miscellaneous/Language.h
181+++ b/src/server/game/Miscellaneous/Language.h
182@@ -1120,7 +1120,7 @@ enum TrinityStrings
183 LANG_OPVP_ZM_GOSSIP_HORDE = 10055,
184
185 // 10056-10066 - free
186-
187+ LANG_NOT_WHISPER = 10100,
188 // Use for custom patches 11000-11999
189 LANG_AUTO_BROADCAST = 11000,
190 LANG_INVALID_REALMID = 11001,
191diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
192index a7f8ba4..f951b20 100644
193--- a/src/server/game/World/World.cpp
194+++ b/src/server/game/World/World.cpp
195@@ -765,6 +765,7 @@ void World::LoadConfigSettings(bool reload)
196 m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Guild", false);
197 m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Auction", false);
198 m_bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetBoolDefault("AllowTwoSide.Trade", false);
199+ m_bool_configs[CONFIG_FAKE_WHO_LIST] = sConfigMgr->GetBoolDefault("Fake.WHO.List", true);
200 m_int_configs[CONFIG_STRICT_PLAYER_NAMES] = sConfigMgr->GetIntDefault ("StrictPlayerNames", 0);
201 m_int_configs[CONFIG_STRICT_CHARTER_NAMES] = sConfigMgr->GetIntDefault ("StrictCharterNames", 0);
202 m_int_configs[CONFIG_STRICT_PET_NAMES] = sConfigMgr->GetIntDefault ("StrictPetNames", 0);
203diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
204index 6d0bc44..77c47955 100644
205--- a/src/server/game/World/World.h
206+++ b/src/server/game/World/World.h
207@@ -100,6 +100,7 @@ enum WorldBoolConfigs
208 CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD,
209 CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION,
210 CONFIG_ALLOW_TWO_SIDE_TRADE,
211+ CONFIG_FAKE_WHO_LIST,
212 CONFIG_ALL_TAXI_PATHS,
213 CONFIG_INSTANT_TAXI,
214 CONFIG_INSTANCE_IGNORE_LEVEL,
215diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
216index d645eb5..ba26121 100644
217--- a/src/server/worldserver/worldserver.conf.dist
218+++ b/src/server/worldserver/worldserver.conf.dist
219@@ -1540,6 +1540,14 @@ AllowTwoSide.Interaction.Auction = 0
220
221 AllowTwoSide.Trade = 0
222
223+# Fake.WHO.List
224+# Add fake players to fill in WHO LIST (who is online list, "O" button) if there is less then
225+# 49 real players online.
226+# Default: 1 (disabled)
227+# 0 (enabled)
228+
229+Fake.WHO.List = 1
230+
231 #
232 # TalentsInspecting
233 # Description: Allow/disallow inspecting other characters' talents.
234--
2352.8.4