Wait! You do not have to delete anything, it is a simple but complex money error meant to inform you that something does not properly match up in the player's in-game money data...
First of all it can be fixed (see below), secondly if it keeps happening then you may need to look deeper into that player's actions in game and where their in-game money is coming from.
-----------------------------------------------------------------------------------------------------
If either SerialCode , SerialCode1, or SerialCode_All are wrong, there will be error messages in PlayerCenter.log files. They will look just like what you see... DBLoadOtherDB money checksum err , dbSerialCode1=xxxxxxxxxxx dbSerialCode1=xxxxxxxxxxx roleSerialCode=xxxxxxxxxxx roleSerialCode1=xxxxxxxxxxx DBID=xxxx
The SQL script in the code block below will fix the issue appearing on any accounts
** Backup ROM_World before running the script. Backups should always be done before changes like this **
IMPORTANT: Adjust the 'WHERE' condition (underlined below)... use Account_ID=x for a specific account, or IsDelete=0 for all non-deleted characters
Code:
USE [ROM_World]
DECLARE @iResult INT
DECLARE @iMoney INT
DECLARE @iRow INT
DECLARE @iMaxRow INT
DECLARE @iStrLen INT
DECLARE @icount INT
DECLARE @asc INT
DECLARE @str VARCHAR(65)
DECLARE @acc VARCHAR(65)
DECLARE @name NVARCHAR(50)
CREATE TABLE #temp(rowNum INT, acc VARCHAR(65), roleName NVARCHAR(50), bodyMoney INT)
PRINT 'Create temp table'
INSERT INTO #temp
SELECT ROW_NUMBER() OVER(ORDER BY DBID), Account_ID, RoleName, BodyMoney FROM RoleData WHERE Account_ID = 0
--PRINT 'Insert into temp table'
SELECT @iMaxRow = Count(*) FROM #temp
--PRINT 'Row count :' + CAST(@iMaxRow AS VARCHAR(10))
SET @iRow = 1
WHILE(@iRow <= @iMaxRow)
BEGIN
SELECT @acc = acc, @iMoney = bodyMoney, @name = roleName FROM #temp WHERE rowNum = @iRow
SET @iResult = 0
--PRINT 'Money: ' + STR(@iMoney)
IF @iMoney <> 0
BEGIN
SET @iStrLen = LEN(@acc) + 4 - (LEN(@acc) % 4)
SET @acc = @acc + REPLICATE(CHAR(0), 4 - (LEN(@acc) % 4))
--PRINT 'String Length :' + STR(@iStrLen)
SET @icount = 1
WHILE(4 <= @iStrLen - @icount - 1))
BEGIN
SET @str = SUBSTRING(@acc, @icount, 4)
SET @asc = ASCII(SUBSTRING(@acc, @icount+3, 1))*256*256*256 + ASCII(SUBSTRING(@acc, @icount+2, 1))*256*256 + ASCII(SUBSTRING(@acc, @icount+1, 1))*256 + ASCII(SUBSTRING(@acc, @icount, 1))
PRINT @str + ' to ASCII :' + STR(@asc)
SET @iResult = @iResult ^ @asc
SET @icount = @icount+4
END
SET @iResult = @iResult ^ 0x6396 ^ @iMoney
--PRINT 'Final Result :' + STR(@iResult)
PRINT ''
END
UPDATE RoleData
SET SerialCode1 = @iResult
WHERE RoleName = @name
PRINT 'RoleName :' + @name + ', ' + 'SerialCode1 :' + STR(@iResult)
PRINT ''
SET @iRow=@iRow+1
END
DROP TABLE #temp