In future, Blizzard should partner with anti-bot company

I think Blizz should focus on what they do best which is game development and just partner with a leader in bot prevention rather than rolling their own solution in-house.

There are many well-established bot prevention companies with long lists of Fortune 500 clients in the web / ecommerce space. They typically provide end-to-end solutions and provide an SDK that can be hooked into a customer’s software that records inputs and behavior. That input data is then sent to and processed by a heavier bot detection component or service which evaluates the input/behavior as bot or human. These systems are very accurate and their accuracy increases with the amount of data they are fed. They also use proven advanced AI, they are fast with evalutions often sub-second and in some cases with solutions sub-10ms, for example:

Our bot prevention software makes comparisons with a massive in-memory pattern database, and uses a blend of AI and machine learning to decide in less than 2 milliseconds…

So one nice thing with these real-time systems is the speed with which they operate. This could be a game-changer. For example, if Blizzard were to ban in waves months apart, botters could simply re-purchase. Banning infrequently may not be cost-prohibitive. But banning automatically with high confidence in an hour, as example, would be a game changer because it would then become very costly for botters.

And if Blizz used one of these systems, got comfortable with it, and assured themselves that detection rates had high confidence and a very low false-positive rate they might gradually just let the system ban automatically with an appeal process. Any time you involve staff in a manual review step as we know that will often kill your business process. So they could start with a process that has a manual step and wean themselves off of that as they gain confidence in the system. They might even get to a point where botters log in, start botting and within a few minutes they’re banned, with only an appeal process left as a resort.

As far as impacting game performance, they would certainly want to ensure there’s no noticeable impact to gameplay as that is the main concern - some of these systems have settings for frequency of input data collection and transfer. One interesting thing with a game is that it provides so much input data compared with other apps or web surfing - all of this additional data collected in-game tends to result in much better detection accuracy. Think of all those mouse and keyboard clicks :slight_smile:

Also, because many of these systems have input/behavior profiles based on various bots in the ecommerce space, it’s likely Blizz would need to “train” the system and customize it. Some systems may also be better suited to Blizzard in terms of software stack compatibility.

Just a closing couple of points, I’ve read some comments here and there suggesting Blizzard already detects the vast majority of bots and simply isn’t efficient with manpower or their process is just too slow resulting in botters running for long periods of time. If that is the case, needless to say partnering with a leader in the field isn’t needed :slight_smile:

I’ve also read that some think Blizzard purposefully keeps botting active to some degree just to make more money off of those game purchases. Or that they ban botters infrequently to make them spend money on new purchases but not so often as to cause them just to quit the game. Stuff like that.

My hope would just be that Blizzard is earnest in combatting bots and using a real-time AI-based solution might enable them to quickly ban botters with a high degree of accuracy.



EDIT #1

Take below info with a giant grain of salt as it may be completely inaccurate, this is from a Wowhead founder, source below as well:

"This is not a technical issue with Blizzard. This is a management decision to allow bots in the game. It is estimated that 20% of all WoW subscriptions are bots. This is due to interview material of large bot farmers who alone had 400k accounts, as well as extrapolating sales from the company that purchased Wowhead, Thottbot, etc.

For those not in the know, IGE purchased them, and they did $500 million a year in sales and were backed by Goldman Sachs, a company with 3 to 5 trillion USD in assets.

We know Blizzard purposefully allows bots because of one simple fact: 2 easy changes would decimate all bots, and Blizzard refuses to do so.

The top 3 bot softwares require LUA Unlockers to function. A LUA Unlocker gives any WoW client access to GM-level client APIs. These APIs are “unlocked” now and enable add-ons to be created to fully automate game play. Blizzard could easily remove these APIs from the client but refuses to do so.

Teleport hacking, used to farm minerals, instances, and raids, could be easily dealt with by monitoring excessive changes to player XYZ coordinates. Once detected, actions could be taken. Private servers do this simply and easily by database checks of character positioning changes. Blizzard refuses to implement this.

The above 2 changes are incredibly simple and low cost changes to implement. Blizzard refused to do so purposefully. They do so as these changes would cause a massive loss of revenue.

Instead, Blizzard has made pandering changes to give the appearance of caring. The instance lockout was strategically done to increase bot subscriptions and give a speaking point to make it seem as if they care.

Same with the multi boxing change. They stated it was to curb bots, yet zero bot softwares multibox. Instead, they all use LUA unlocked based automation."

Answering a question from a reply : “They could, but are those APIs really so essential to create a successful botting software?”

"Yes, they are absolutely critical. The top botting software products all use LUA unlockers. I would estimate 95%+ bots would immediately fail due to this one solution.

Teleport hacking definitely still works.

I know it sounds shocking that these 2 changes would remove all botting as we know it. It would. This is why these 2 changes have not occurred. The revenue decline for Blizzard would be massive."

Source: https://www.reddit.com/r/classicwow/comments/kx6uon/wowheads_founder_on_why_blizzard_wont_ban_bots/

EDIT #2

This is on Warden when it was first exposed by cybersecurity expert Greg Hoglund in 2005. This shows Blizzard has no problem with installing invasive and performance-affecting software on our PCs:

"I recently performed a rather long reversing session on a piece of software written by Blizzard Entertainment, yes—the ones who made Warcraft, and World of Warcraft (which has 4.5 million+ players now, apparently). This software is known as the ‘warden client’—it’s written like shellcode in that it’s position independent. It is downloaded on the fly from Blizzard’s servers, and it runs about every 15 seconds. It is one of the most interesting pieces of spyware to date, because it is designed only to verify compliance with a EULA/TOS. Here is what it does, about every 15 seconds, to about 4.5 million people (500,000 of which are logged on at any given time):

The warden dumps all the DLL’s using a ToolHelp API call. It reads information from every DLL loaded in the ‘world of warcraft’ executable process space. No big deal.

The warden then uses the GetWindowTextA function to read the window text in the titlebar of every window. These are windows that are not in the WoW process, but any program running on your computer. Now a Big Deal.

I watched the warden sniff down the email addresses of people I was communicating with on MSN, the URL of several websites that I had open at the time, and the names of all my running programs, including those that were minimized or in the toolbar. These strings can easily contain social security numbers or credit card numbers, for example, if I have Microsoft Excel or Quickbooks open w/ my personal finances at the time.

Once these strings are obtained, they are passed through a hashing function and compared against a list of ‘banning hashes’—if you match something in their list, I suspect you will get banned. For example, if you have a window titled ‘WoW!Inmate’—regardless of what that window really does, it could result in a ban. If you can’t believe it, make a dummy window that does nothing at all and name it this, then start WoW. It certainly will result in warden reporting you as a cheater. I really believe that reading these window titles violates privacy, considering window titles contain a lot of personal data. But, we already know Blizzard Entertainment is fierce from a legal perspective. Look at what they have done to people who tried to make BNetD, freecraft, or third-party WoW servers.

Next, warden opens every process running on your computer. When each program is opened, warden then calls ReadProcessMemory and reads a series of addresses—usually in the 0x0040xxxx or 0x0041xxxx range—this is the range that most executable programs on windows will place their code. Warden reads about 10–20 bytes for each test, and again hashes this and compares against a list of banning hashes. These tests are clearly designed to detect known 3rd party programs, such as wowglider and friends. Every process is read from in this way. I watched warden open my email program, and even my PGP key manager. Again, I feel this is a fairly severe violation of privacy, but what can you do? It would be very easy to devise a test where the warden clearly reads confidential or personal information without regard.

This behavior places the warden client squarely in the category of spyware. What is interesting about this is that it might be the first use of spyware to verify compliance with a EULA. I cannot imagine that such practices will be legal in the future, but right now in terms of law, this is the wild wild west. You can’t blame Blizz for trying, as well as any other company, but this practice will have to stop if we have any hope of privacy. Agree w/ botting or game cheaters or not, this is a much larger issue called ‘privacy’ and Blizz has no right to be opening my excel or PGP programs, for whatever reason."

11 Likes

Lol if that happened, most people around here would be toast.

They preach against botting with their main account, they bot with their alts.

#facts

Like that saying goes: no one protests louder than a thief who’s been robbed.

6 Likes

I don’t know if teaming up with other companies is the solution, but they should definitely step up their game on cheaters. Their current “effort” is embarrassing.

2 Likes

It’s interesting that in WoW we have full event-driven LUA scripting and even with many protected and noncombat API calls, it’s still ridiculously powerful.

Ex, just looking at DBM repo, LUA’s a decently powerful language. I wouldn’t even mind if D2R devs or D4/D5 in future added leaner meaner scripting support in a similar way, with a much smaller impl and much smaller exposed range of API calls though because Diablo functionality is such a tiny subset of WoW. Ex, in the heart of DBM:

function DBM:StartCombat(mod, delay, event, synced, syncedStartHp, syncedEvent)
			tinsert(inCombat, mod)
			if mod.inCombatOnlyEvents and not mod.inCombatOnlyEventsRegistered then
				mod.inCombatOnlyEventsRegistered = 1
				mod:RegisterEvents(unpack(mod.inCombatOnlyEvents))
			end
			--Fix for "attempt to perform arithmetic on field 'stats' (a nil value)"

			local name = mod.combatInfo.name
			local modId = mod.id
			if C_Scenario.IsInScenario() and (mod.addon.type == "SCENARIO") then
				mod.inScenario = true
			end
			mod.inCombat = true
			mod.blockSyncs = nil
			mod.combatInfo.pull = GetTime() - (delay or 0)
			bossuIdFound = event == "IEEU"
			if mod.minCombatTime then
				self:Schedule(mmax((mod.minCombatTime - delay), 3), checkWipe, self)
			else
				self:Schedule(3, checkWipe, self)
			end
			--get boss hp at pull
			if syncedStartHp and syncedStartHp < 1 then
				syncedStartHp = syncedStartHp * 100
			end
			local startHp = syncedStartHp or mod:GetBossHP(mod.mainBoss or mod.combatInfo.mob or -1) or 100
			--check boss engaged first?
			if (savedDifficulty == "worldboss" and startHp < 98) or (event == "UNIT_HEALTH" and delay > 4) or event == "TIMER_RECOVERY" then
				mod.ignoreBestkill = true
			elseif mod.inScenario then
				local _, currentStage, numStages = C_Scenario.GetInfo()
				if currentStage > 1 and numStages > 1 then
					mod.ignoreBestkill = true
				end
			else--Reset ignoreBestkill after wipe
				mod.ignoreBestkill = false
				--It was a clean pull, so cancel any RequestTimers which might fire after boss was pulled
				--Only want timer recovery on in progress bosses, not clean pulls
				if startHp > 98 and (savedDifficulty == "worldboss" or event == "IEEU") or event == "ENCOUNTER_START" then
					self:Unschedule(self.RequestTimers)
				end
			end
			if not mod.inScenario then
				if self.Options.HideTooltips then
					--Better or cleaner way?
					tooltipsHidden = true
					GameTooltip.Temphide = function() GameTooltip:Hide() end; GameTooltip:SetScript("OnShow", GameTooltip.Temphide)
				end
				if self.Options.DisableSFX and GetCVar("Sound_EnableSFX") == "1" then
					SetCVar("Sound_EnableSFX", 0)
				end
				--boss health info scheduler
				if mod.CustomHealthUpdate then
					self:Schedule(1, checkCustomBossHealth, self, mod)
				else
					self:Schedule(1, checkBossHealth, self, mod.onlyHighest)
				end
			end
			--process global options
			self:HideBlizzardEvents(1)
			if self.Options.RecordOnlyBosses then
				self:StartLogging(0, nil)
			end
			if self.Options.HideObjectivesFrame and mod.addon.type ~= "SCENARIO" and GetNumTrackedAchievements() == 0 and difficultyIndex ~= 8 and not InCombatLockdown() then
				if ObjectiveTrackerFrame:IsVisible() then
					--ObjectiveTrackerFrame:Hide()
					ObjectiveTracker_Collapse()
					watchFrameRestore = true
				end
			end
			fireEvent("DBM_Pull", mod, delay, synced, startHp)
			self:FlashClientIcon()
			--serperate timer recovery and normal start.
			if event ~= "TIMER_RECOVERY" then
				--add pull count
				if mod.stats and not mod.noStatistics then
					if not mod.stats[statVarTable[savedDifficulty].."Pulls"] then mod.stats[statVarTable[savedDifficulty].."Pulls"] = 0 end
					mod.stats[statVarTable[savedDifficulty].."Pulls"] = mod.stats[statVarTable[savedDifficulty].."Pulls"] + 1
				end
				--show speed timer
				if self.Options.AlwaysShowSpeedKillTimer2 and mod.stats and not mod.ignoreBestkill and not mod.noStatistics then
					local bestTime
					if difficultyIndex == 8 then--Mythic+/Challenge Mode
						local bestMPRank = mod.stats.challengeBestRank or 0
						if bestMPRank == difficultyModifier then
				--Don't show speed kill timer if not our highest rank. DBM only stores highest rank
							bestTime = mod.stats[statVarTable[savedDifficulty].."BestTime"]
						end
					else
						bestTime = mod.stats[statVarTable[savedDifficulty].."BestTime"]
					end
					if bestTime and bestTime > 0 then
						local speedTimer = mod:NewTimer(bestTime, L.SPEED_KILL_TIMER_TEXT, "237538", nil, false)
						speedTimer:Start()
					end
				end
				--update boss left
				if mod.numBoss then
					mod.vb.bossLeft = mod.numBoss
				end
				--elect icon person
				if mod.findFastestComputer and not self.Options.DontSetIcons then
					if self:GetRaidRank() > 0 then
						for i = 1, #mod.findFastestComputer do
							local option = mod.findFastestComputer[i]
							if mod.Options[option] then
								sendSync("IS", UnitGUID("player").."\t"..tostring(self.Revision).."\t"..option)
							end
						end
					elseif not IsInGroup() then
						for i = 1, #mod.findFastestComputer do
							local option = mod.findFastestComputer[i]
							if mod.Options[option] then
								canSetIcons[option] = true
							end
						end
					end
				end
				--call OnCombatStart
				if mod.OnCombatStart then
					local startEvent = syncedEvent or event
					mod:OnCombatStart(delay or 0, startEvent == "PLAYER_REGEN_DISABLED_AND_MESSAGE" or startEvent == "SPELL_CAST_SUCCESS" or startEvent == "MONSTER_MESSAGE", startEvent == "ENCOUNTER_START")
				end
				--send "C" sync
				if not synced then
					sendSync("C", (delay or 0).."\t"..modId.."\t"..(mod.revision or 0).."\t"..startHp.."\t"..tostring(self.Revision).."\t"..(mod.hotfixNoticeRev or 0).."\t"..event)
				end
				if UnitIsGroupLeader("player") then
					if self.Options.DisableGuildStatus then
						sendSync("DGP")
					end
					if self.Options.DisableStatusWhisper and (difficultyIndex == 8 or difficultyIndex == 14 or difficultyIndex == 15 or difficultyIndex == 16) then
						sendSync("DSW")
					end
				end
				if self.Options.oRA3AnnounceConsumables and _G["oRA3Frame"] then
					local oRA3 = LibStub("AceAddon-3.0"):GetAddon("oRA3", true)
					if oRA3 then
						local consumables = oRA3:GetModule("Consumables", true)
						if consumables then
							consumables:OutputResults()
						end
					end
				end
				--show engage message
				if self.Options.ShowEngageMessage and not mod.noStatistics then
					if mod.ignoreBestkill and (savedDifficulty == "worldboss") then
						self:AddMsg(L.COMBAT_STARTED_IN_PROGRESS:format(difficultyText..name))
					elseif mod.ignoreBestkill and mod.inScenario then
						self:AddMsg(L.SCENARIO_STARTED_IN_PROGRESS:format(difficultyText..name))
					else
						if mod.addon.type == "SCENARIO" then
							self:AddMsg(L.SCENARIO_STARTED:format(difficultyText..name))
						else
							self:AddMsg(L.COMBAT_STARTED:format(difficultyText..name))
							if (difficultyIndex == 8 or difficultyIndex == 14 or difficultyIndex == 15 or difficultyIndex == 16) and InGuildParty() and not statusGuildDisabled and not self.Options.DisableGuildStatus then
								self:Schedule(1.5, delayedGCSync, modId, difficultyIndex, difficultyModifier, name)
							end
						end
					end
				end
				--stop pull count
				local dummyMod = self:GetModByName("PullTimerCountdownDummy")
				if dummyMod then--stop pull timer
					dummyMod.text:Cancel()
					dummyMod.timer:Stop()
					if not self.Options.DontShowPTCountdownText then
						for _, tttimer in pairs(TimerTracker.timerList) do
							if tttimer.type == 3 and not tttimer.isFree then
								FreeTimerTrackerTimer(tttimer)
								break
							end
						end
					end
				end
				local bigWigs = _G["BigWigs"]
				if bigWigs and bigWigs.db.profile.raidicon and not self.Options.DontSetIcons and self:GetRaidRank() > 0 then
					self:AddMsg(L.BIGWIGS_ICON_CONFLICT)
				end
				if self.Options.EventSoundEngage2 and self.Options.EventSoundEngage2 ~= "" and self.Options.EventSoundEngage2 ~= "None" then
					self:PlaySoundFile(self.Options.EventSoundEngage2, nil, true)
				end
				if self.Options.EventSoundMusic and self.Options.EventSoundMusic ~= "None" and self.Options.EventSoundMusic ~= "" and not (self.Options.EventMusicMythicFilter and (savedDifficulty == "mythic" or savedDifficulty == "challenge")) and not mod.noStatistics then
					fireEvent("DBM_MusicStart", "BossEncounter")
					if not self.Options.RestoreSettingMusic then
						self.Options.RestoreSettingMusic = tonumber(GetCVar("Sound_EnableMusic")) or 1
						if self.Options.RestoreSettingMusic == 0 then
							SetCVar("Sound_EnableMusic", 1)
						else
							self.Options.RestoreSettingMusic = nil
						end
					end
					local path = "MISSING"
					if self.Options.EventSoundMusic == "Random" then
						local usedTable = self.Options.EventSoundMusicCombined and self.Music or mod.inScenario and self.DungeonMusic or self.BattleMusic
						if #usedTable >= 3 then
							local random = fastrandom(3, #usedTable)
							path = usedTable[random].value
						end
					else
						path = self.Options.EventSoundMusic
					end
					if path ~= "MISSING" then
						PlayMusic(path)
						self.Options.musicPlaying = true
						self:Debug("Starting combat music with file: "..path)
					end
				end
			else
				self:AddMsg(L.COMBAT_STATE_RECOVERED:format(difficultyText..name, strFromTime(delay)))
				if mod.OnTimerRecovery then
					mod:OnTimerRecovery()
				end
			end
			if savedDifficulty == "worldboss" and self.Options.EnableWBSharing and not mod.noWBEsync then
				if lastBossEngage[modId..playerRealm] and (GetTime() - lastBossEngage[modId..playerRealm] < 30) then return end
				lastBossEngage[modId..playerRealm] = GetTime()
				SendWorldSync(self, "WBE", modId.."\t"..playerRealm.."\t"..startHp.."\t8\t"..name)
			end
		end
	end

Like in Wow, with LUA API calls in areas like camera, maps, player, buffs, guilds, chat, vendor, trading, quests, key binds, and on and on, the list is huge and Diablo would only need a tiny amount of that.

Anyway for modding, it sounds like D2R devs are simply consolidating hardcodes and rolling up into a giant prop file with prop=value lines, and that’s just super unappealing. I had originally thought they would expose a modding API because some of their comments seemed to lean in that direction when they discussed banning DLL injection and so on. They definitely know that banning injection and mempatching will kill sophisticated mods and they therefore would need to replace much of that “functionality” in a new API etc. But I think that may have been wishful thinking on my part.

But yeah, it would be great if Diablo devs would either embed decently-powerful scripting support like WoW has done w/ LUA (on a much more scaled-down level obviously) OR add a decent simple API in conjunction with data-driven prop file(s) to make up for the loss of DLL injection/hooking which they seem to be aggressively prosecuting now :slight_smile:

Like this kind of injection is no longer “kosher” apparently:

HANDLE Inject(PWCHAR ProcName, DWORD PID, PTHREAD_START_ROUTINE RemoteProc, DWORD Base, HANDLE hThread)
{
	IMAGE_DOS_HEADER * dos;
	IMAGE_NT_HEADERS *pe;
	DWORD SizeOfImage, tmp;
	PVOID NewBase, NewImage;
	HANDLE Proc;
		
	if (PID == NULL) PID = FindProcess(ProcName);
	
	if (Base == NULL) Base = (DWORD) GetModuleHandle(NULL);

	dos = (IMAGE_DOS_HEADER *) Base;
	pe = (IMAGE_NT_HEADERS *) ((DWORD) dos->e_lfanew + (DWORD) dos);

	SizeOfImage = pe->OptionalHeader.SizeOfImage;

	Proc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD, 0, PID);	
	NewBase = VirtualAllocEx(Proc, NULL, SizeOfImage, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

	if (Proc && NewBase)
	{	
		NewImage = VirtualAlloc(NULL, SizeOfImage, MEM_COMMIT, PAGE_READWRITE);

		// MemCpy
		__asm
		{
			pushad

			cld
			mov		esi, Base
			mov		edi, NewImage
			mov		ecx, SizeOfImage
			rep		movsb

			popad
		}

		// Fix-up offsets
		FixBase(NewImage, (DWORD)NewBase - Base); 
		WriteProcessMemory(Proc, NewBase, NewImage, SizeOfImage, &tmp);
		VirtualFree(NewImage, 0, MEM_RELEASE);

		RemoteProc = (PTHREAD_START_ROUTINE) ((DWORD) RemoteProc - Base + (DWORD) NewBase);
		CONTEXT ctx;
		ctx.ContextFlags = CONTEXT_FULL;
		if ( !hThread )
		{
			hThread = CreateRemoteThread(Proc, NULL, NULL, RemoteProc, 0, CREATE_SUSPENDED, &tmp);
			if ( hThread )
			{
				if ( GetThreadContext( hThread, &ctx ) )
				{
					ctx.Eax;			// any
					ctx.Ecx = 0;			// oep
					ctx.Edx = (DWORD) NewBase;	// iInstance
					ctx.Eip = (DWORD) RemoteProc;
					SetThreadContext( hThread, &ctx );
					ResumeThread( hThread );
				}
			}
		} 
		else
		{
			if ( GetThreadContext( hThread, &ctx ) )
			{
				ctx.Eax;			// oeax
				ctx.Ecx = ctx.Eip;		// oeip
				ctx.Edx = (DWORD) NewBase;	// iInstance
				ctx.Eip = (DWORD) RemoteProc;
				SetThreadContext( hThread, &ctx );
			}
		}

	}

	CloseHandle(Proc);

	return hThread;
}

Agreed. I don’t think I’ve ever seen an official statement from them on what bot detection sw they use either. And at times, as we know, they’ve really gone hard after some of those WoW botting companies and just completely shut them down.

2 Likes

I was skeptical of how many people actually botted but found some info saying that 20% of WoW subs are bots and some WoW bot farmers have as many as 400,000 bots lol. A purported Wowhead founder went on to say “The revenue decline for Blizzard would be massive.”. He also took the time to provide some proof of identity so as a source it seems this may be legit.

This may, if true, end the debate about Blizzard and bots. Implying Blizzard genuinely has no interest in truly eliminating bots, at least in WoW. And I suppose we could just extrapolate to Diablo.

Updated OP with details.

He would have absolutely no idea about how many bots are running in WoW. None. His “estimate” is just that - a wild guess made without access to the number of players, number of players banned, etc. He has zero data. They do huge ban waves regularly in WoW to combat it and sue the heck out of the bot makers when they can.

Not even most of the people who work at Blizzard know the stats on botting vs legit players. The Hacks team does not share much with anyone, not even internally. Certainly not with someone who does not work for Blizz.

Worse - a huge chunk of the botters are gold farmers from criminal orgs in countries that the US law can’t reach. They use stolen accounts - strip them of gold, use them to advertise, use them to bot gold, use them to move gold. They don’t actually pay for it and they have thousands and thousands of accounts they phished info for, or used malware to get.

So yeah, the big botters don’t care if they get an account banned because they move to the next stolen one.

Edit - Wait, so this Tim guy was CEO of Wowhead which sold in 2007. He now sells his own Steam software stuff…

He admits totally to guessing about all this.

1 Like

Humerously you posted in the middle of my posting/edits which included putting “purported” and “if genuine” “if true” and so on :slight_smile:

Are you thinking that the source, the Wowhead founder is who he says he is but that his statements are just wild claims? Or that he is also not who he says he is?

I’m also curious about this: “2 easy changes would decimate all bots, and Blizzard refuses to do so.

Are you thinking that is also a wild claim?

1 Like

I have no idea if he is or not. I suppose I could ask Perculia if I wanted. I don’t really feel motivated to do that right this second.

Regardless though, even he really was CEO in 2007 when it sold (one year after being launched). Even if he is who he says he is. He had no access then, and has no access now, to the data about the player base to make an educated guess.

As for “ending botting” with these two simple moves! I doubt it. Again, botting is terrible for the game, pisses off legit players, makes people quit, results in compromised accounts - and creates a LOT of work for Blizzard that they have to pay people to do.

Oh, and bot makers sell the bots. So they want you to think they are not going to be detected or shut down.

1 Like

If the botting parody continues in Diablo 4 I am done with Blizzard.

1 Like

Fair enough. I edited OP to say " Take all this with a giant grain of salt as it may be completely inaccurate" :slight_smile:

If I have time I will msg him on reddit and see what the deal is - he deleted his comment in the original thread though so that seems somewhat ominous. He also had an odd legal disclaimer asterisk in the original comment which seemed a bit over the top.

1 Like

Great.

I just find it funny when people make guesses at game populations and the sub groups of them.

WoW is dead - nobody plays!!!
WoW is so big that it has 400K bots and that is only a fraction of the playerbase!!

The only people who know are the Blizz folks - and even then, only the Hacks team has an idea what percent of the playerbase is botting, or suspected of it (even if not caught yet).

The Security stuff at Blizz is need-to-know, even for people who work there.

P.S. Hacks is not the name of the team. It is just what they publicly call it.

That might be fine as long as they are flawless in operation. The problem is that nothing that human beings create is flawless. The danger is that there will be false positives that would get accounts permanently banned that weren’t botting. One account getting banned like that is more than enough. But it will more than likely be more than just one. That would be a huge PR disaster bigger than the PR disaster that was Enhancement Diversification (ED) during the days City of Heroes was active.

The devs knew that they were gonna release City of Villains. They knew that the villains would be balanced around ED. If they didn’t add it in Issue Six: Along Came A Spider the villains would be way OP’d. They had players testing Issue Six in closed beta on the PTR. All were under an NDA, but some broke it when they knew that the devs wouldn’t tell the players about the nerf to the enhancements.

Sure the devs kept their promise of not touching the base damage or defense of the powers, no base numbers were touched. Some were so mad that they broke their NDA and told the community. The PR nightmare of trying the patch things up was a big mess. I don’t know what the devs were thinking. Why would any of them think it would be okay to spring that nerf on the players where it would be like saying surprise, surprise, surprise.

Blizz doesn’t want to take any chances of false positives and I don’t blame them.

With a game that is as cheap as D3 is these days forget it.

It is the rate of false positives that they don’t want. With human beings not being flawless at designing things there are bound to be more false positives than you would imagine. More so in the early stages of the AI learning the ropes.

With the system in place they have right now, even though botting is still an ongoing problem. They only have a very, very, very, very small false positives compared to the ones that would be generated due to trusting another company’s system to do it for you. Beside that could also cause more people to lose their jobs if it is cheaper.

Another thing that I didn’t think of is the potential for extra lag. At times the game gets lag spikes that could be bigger or cause all kinds of problems. If they have to have the players computer have an extra program that would be like a big brother on their computer then there might be legal issues concerning it.

Hell even if the claims about it were true it’s not like bot makers would just give up because Blizzard closed a vulnerability they’re exploiting.

They’d just find another way to do it. Botting and using it to farm gold is too profitable for them to just give up that easily.

While nobody wants false positives, Blizz does consider that a natural consequences of bans. It WILL happen from time to time. It is also why they have the appeals process - and why if they get a ton of appeals they take a second look at the detection methods.

Last week for example an addon was falsely flagged in addition to other things in a large ban wave. Those who had the addon did get unbanned.

Blizz does not let false positives stop them from doing ban waves. They just do their best to clean up afterwards if they get something wrong.

1 Like

If the plug wasn’t pulled I’m sure we would have seen more regular ban waves or a more aggressive approach considering how bad it got. With no resources, I’m sure it was more difficult to do.

1 Like

It might be a bit better but it’s not like their efforts on WoW are any less embarrassing when that game is still being actively developed.

Classic especially is absolutely filled with gold sellers that farm gold using bots. Since Blizzard does banwaves about once every 2-6 months then buying as new account is just a “cost of doing business” for them.

WoWs a bit different. You ban botters you lose revenue. They have also publically said many botting accounts have been stolen so they don want to ban someone who legitimately had their account compromised. I don’t agree you bit, you get banned. Sort out the legit and non legit claims afterwards.

They do ban the accounts. They also realize that they are often stolen though so if that can be proven, they allow an overturn on appeal once the proper account holder gets control back and secures the account.

It is very very very common for compromised accounts to find out they are banned.

Like this one the other day

1 Like

I know they do. I still think they could be more aggressive about it.

I was thinking more like “offline progression” Players gets points, they can use them as they please. Even when you’re at work or not playing, you can think how to progress in Diablo.

Some games even turn character into bot, when they logout.