View Full Version : |Dúvida| Dupe 97d
stark
07-23-2024, 05:09 PM
Boa tarde pessoal,
Alguém sabe alguma forma de deletar itens dupados do servidor em "tempo real"? Notei que a maioria dos servidores 97D hoje tem dupe (com muserver da FLAME TEAM) e o antidupe deles é falho.. tem hora que remove item que nem é dupado (checa a tela do player de tempos em tempos e vê se tem serial dupado e remove) só que vira e mexe buga e remove item "limpo".
Lembro que antigamente havia softwares que fazia essa checagem no SQL, isso ainda existe? Como estão fazendo hoje em dia?
cronusmaker
07-24-2024, 02:14 AM
Boa tarde pessoal,
Alguém sabe alguma forma de deletar itens dupados do servidor em "tempo real"? Notei que a maioria dos servidores 97D hoje tem dupe (com muserver da FLAME TEAM) e o antidupe deles é falho.. tem hora que remove item que nem é dupado (checa a tela do player de tempos em tempos e vê se tem serial dupado e remove) só que vira e mexe buga e remove item "limpo".
Lembro que antigamente havia softwares que fazia essa checagem no SQL, isso ainda existe? Como estão fazendo hoje em dia?
infelismente e meio complicado fazer isso pois não tem como tu saber se o item esta dupado ou não isso e algo que o proprio servidor faz a verificação
esse foi um dos motivos de parar de mexer com gs antigos pois hoje 97d por mais que nostalgica a maioria dos gs não tem essa verificação o ultimo que usei
foi o gs do pronoob
então o recomendado e migrar pra algun gs mais recente que usar os gs por exemplo antigos da viciadosmu
DarkAngeL
07-24-2024, 02:44 AM
Boa tarde pessoal,
Alguém sabe alguma forma de deletar itens dupados do servidor em "tempo real"? Notei que a maioria dos servidores 97D hoje tem dupe (com muserver da FLAME TEAM) e o antidupe deles é falho.. tem hora que remove item que nem é dupado (checa a tela do player de tempos em tempos e vê se tem serial dupado e remove) só que vira e mexe buga e remove item "limpo".
Lembro que antigamente havia softwares que fazia essa checagem no SQL, isso ainda existe? Como estão fazendo hoje em dia?
Se removeu é porque o item tinha o mesmo serial, o problema é que vocês edita os itens sem o auto serial!
Todos os métodos existentes para duplicar itens na versão foram corrigidos, deve ter alguma falha ou falta de configuração mesmo, evite baixar o tempo para a troca/abertura do baú.
LuizerA
01-18-2025, 02:20 AM
Não sei se estou errado, se tiver alguém me corrija.
O ideal é usar um editor que gere o serial pelo ItemCount do sql na tabela GameServerInfo, da mesma forma que é gerado automaticamente quando dropa um item no server. Pois esses de auto serial, depois o jogo pode acabar fornecendo seriais iguais.
Romário
01-24-2025, 03:22 PM
Para quem não sabe, é possível gerar serial inválida ou duplicado em ITEM até dropando uma simples box dentro do jogo usando GS 97-99, isso ocorre devido a um problema que existe no DataServer, as vezes ele para de funcionar, do nada, por isso usavam 2 no MuServer original, e com a correção para aquele lance do NoStandby para corrigir problemas de travamentos no login isso pode piorar as coisas. Nos arquivos 99z tem uma opção que consegue identificar em tempo real isso e bloqueia o item até que o problema seja resolvido.
A solução a nível de código, pelo menos no meu GS, eu resolvi fazendo uma checagem de janelas e estado do personagem. O GS da 99z é o mesmo da 97d, então a solução deve ser a mesma.
Para quem estiver procurando uma Query, aqui está uma que eu utilizei por um tempo até achar um solução a nível de código. Ela cria uma tabela e usa uma trigger para scanear os itens dupados. Se achar algum, o personagem é bloqueado, mas vc pode modificar como quiser:
-- Verifica se a tabela [DupesDetected] existe, e caso exista, ela é excluída
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[DupesDetected]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[DupesDetected]
GO
-- Cria a tabela [DupesDetected]
CREATE TABLE [dbo].[DupesDetected] (
[ID] [int] IDENTITY (1, 1) NOT NULL,
[AccountID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Name] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[ITEM_TYPE] [binary] (1) NOT NULL,
[ITEM_SERIAL] [binary] (4) NOT NULL,
[INV_POSITION] [smallint] NOT NULL,
[WH_POSITION] [smallint] NOT NULL,
[TIMESTAMP] [smalldatetime] NOT NULL
) ON [PRIMARY]
GO
-- Cria a chave primária para a tabela [DupesDetected]
ALTER TABLE [dbo].[DupesDetected] WITH NOCHECK ADD
CONSTRAINT [PK_DupesDetected] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
-- Adiciona um valor padrão para a coluna [TIMESTAMP]
ALTER TABLE [dbo].[DupesDetected] ADD
CONSTRAINT [DF_Table1_TIMESTAMP] DEFAULT (GETDATE()) FOR [TIMESTAMP]
GO
-- Cria o trigger [DUPEFINDER] para detectar itens duplicados
CREATE TRIGGER [dbo].[DUPEFINDER] ON [dbo].[character]
FOR UPDATE
AS
IF UPDATE(inventory)
BEGIN
SET NOCOUNT ON
DECLARE
@CHARNAME varchar(10),
@ACCOUNT_ID varchar(10),
@INV binary(760),
@ITEM_TYPE binary(1),
@ITEM_SERIAL binary(4),
@WAREHOUSE binary(1200),
@j smallint,
@k smallint,
@PWOLD smallint,
@PWNEW smallint
-- Obtém o inventário e os dados do usuário
SELECT @ACCOUNT_ID = accountid, @CHARNAME = Name, @INV = inventory FROM inserted
SET @j = 0
-- Itera sobre os itens do inventário
WHILE (@j < 76) AND (@INV IS NOT NULL)
BEGIN
-- Obtém o tipo e o serial do item
SET @ITEM_TYPE = SUBSTRING(@INV, @j * 10 + 1, 1)
SET @ITEM_SERIAL = SUBSTRING(@INV, @j * 10 + 4, 4)
-- Verifica se o tipo é válido e o serial não é "0"
IF @ITEM_TYPE <> 0xFF AND @ITEM_SERIAL <> 0x00000000
BEGIN
-- Obtém os dados do warehouse caso ainda não tenha sido feito
IF (@WAREHOUSE IS NULL)
BEGIN
SELECT @WAREHOUSE = items, @PWOLD = pw FROM warehouse WHERE accountid = @ACCOUNT_ID
END
-- Itera sobre os slots do warehouse
SET @k = 0
WHILE (@k < 120) AND (@WAREHOUSE IS NOT NULL)
BEGIN
-- Verifica se o tipo e o serial coincidem
IF (SUBSTRING(@WAREHOUSE, @k * 10 + 1, 1) = @ITEM_TYPE) AND (SUBSTRING(@WAREHOUSE, @k * 10 + 4, 4) = @ITEM_SERIAL)
BEGIN
-- Insere o item duplicado no log
INSERT INTO DupesDetected (AccountID, Name, ITEM_TYPE, ITEM_SERIAL, INV_POSITION, WH_POSITION)
VALUES (@ACCOUNT_ID, @CHARNAME, @ITEM_TYPE, @ITEM_SERIAL, @j, @k)
-- Desconecta o usuário
UPDATE MEMB__STAT SET CONNECTSTAT = 0 WHERE ACCOUNTID = @ACCOUNT_ID
-- Bloqueia o baú
-- Obtém o novo código de bloqueio
SET @PWNEW = DATEPART(YYYY, GETDATE()) + DATEPART(MM, GETDATE()) + DATEPART(D, GETDATE())
-- Atualiza o código de bloqueio do baú
UPDATE WAREHOUSE SET PW = @PWNEW, LASTPW = @PWOLD WHERE (ACCOUNTID = @ACCOUNT_ID)
-- Bane todos os personagens da conta
UPDATE [CHARACTER] SET CTLCODE = 1 WHERE ACCOUNTID = @ACCOUNT_ID
END
-- Incrementa o contador para o próximo slot
SET @k = @k + 1
END
END
-- Incrementa o contador para o próximo item
SET @j = @j + 1
END
SET NOCOUNT ON
END
GO
Acho que seu problema está no uso do Editor. Já uso isso há algum tempo e não tive problemas com detecções.
LuizerA
01-25-2025, 03:09 AM
Para quem não sabe, é possível gerar serial inválida ou duplicado em ITEM até dropando uma simples box dentro do jogo usando GS 97-99, isso ocorre devido a um problema que existe no DataServer, as vezes ele para de funcionar, do nada, por isso usavam 2 no MuServer original, e com a correção para aquele lance do NoStandby para corrigir problemas de travamentos no login isso pode piorar as coisas. Nos arquivos 99z tem uma opção que consegue identificar em tempo real isso e bloqueia o item até que o problema seja resolvido.
A solução a nível de código, pelo menos no meu GS, eu resolvi fazendo uma checagem de janelas e estado do personagem. O GS da 99z é o mesmo da 97d, então a solução deve ser a mesma.
Para quem estiver procurando uma Query, aqui está uma que eu utilizei por um tempo até achar um solução a nível de código. Ela cria uma tabela e usa uma trigger para scanear os itens dupados. Se achar algum, o personagem é bloqueado, mas vc pode modificar como quiser:
pelo que sei, quando gera o serial de algum item a primeira vez, o dataserver roda a procedure 1x já com uma quantia grande, e depois só vai gerando os itens com esses seriais até terminar e gerar mais. Inclusive se ficar reiniciando o dataserver, ta desperdiçando serial. Já no muemu acho que mudaram pra sempre gerar de 1 em 1, mas aí toda vez fica rodando a procedure em todo item.
Romário
01-25-2025, 03:24 AM
pelo que sei, quando gera o serial de algum item a primeira vez, o dataserver roda a procedure 1x já com uma quantia grande, e depois só vai gerando os itens com esses seriais até terminar e gerar mais. Inclusive se ficar reiniciando o dataserver, ta desperdiçando serial. Já no muemu acho que mudaram pra sempre gerar de 1 em 1, mas aí toda vez fica rodando a procedure em todo item.
Bom... Vc está completamente errado, esses DataServers antigos são bem mais complexos doq vc pensa. Rsrsrsrsrsrsrs. Inclusive eles não funcionam com qualquer SQL. DataSwrver não trabalha apenas com procedures, ele trabalha em conjunto com o GS. Eu teria um enorme prazer em mostrar como o Mu Online original funciona, mas acredito que não vale mais apena o trabalho. Existem tantos emuladores.... Hahahahahahahahaha
Romário
01-25-2025, 03:31 AM
E digo mais, os ConnectServer e Dataserver que os emuladores de hoje tem, não chegam nem perto do que oq fizeram em 2003-2006, oque é deprimente. Hahahahahaha
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.