vSRO Paylaşım vSRO Exchange Log

Admin1

silkroadpvp.com.tr
Yönetici
Katılım
26 Ocak 2022
Mesajlar
511
Tepkime puanı
0
Puanları
0
Konum
KRAL
[HIDE]
Bu paylaşımımda sizlere kendi sunucum için hazırladığım karakterler arası yapılan takasların loglarını tutan bir prosedürü yayınlayacağım..
Evet biliyorum SMC'de bu özellik mevcut fakat pek stabil değil ve çoğu SMC'de çalışmıyor.. Çalışmaması bir yandan iyi oyunun kendi veritabanını şişirmiyor..
Bu sistem farklı bir veritabanı içine kurulacağı için oyunun kendi veritabanında herhangi bir şişirme yapmaz.

Paylaşım Adı:Exchange Log Sistemi
Paylaşım İçeriği:Prosedür

Öncelikle sistemin kurulacağı veritabanına karar veriyoruz
ve sonrasında aşağıya koyduğum sorguyu veritabanı ismini değiştirerek okutuyoruz..



USE [SRO_VT_SYSTEM] --- Veritabani ismi


GO



/****** Object: Table [dbo].[_ExchangeLog] Script Date: 4.12.2023 10:46:30 ******/

SET ANSI_NULLS ON

GO



SET QUOTED_IDENTIFIER ON

GO



SET ANSI_PADDING ON

GO



CREATE TABLE [dbo].[_ExchangeLog](

[Idx] [int] IDENTITY(1,1) NOT NULL,

[CharID] [int] NULL,

[Charname] [varchar](50) NULL,

[TargetCharID] [int] NULL,

[TargetCharname] [varchar](50) NULL,

[Request] [varchar](max) NULL,

[ItemSerial] [bigint] NULL,

[Eventpos] [varchar](256) NULL,

[EventDate] [datetime] NULL,

CONSTRAINT [PK__ExchangeLog] PRIMARY KEY CLUSTERED

(

[Idx] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



GO



SET ANSI_PADDING OFF

GO
Bu sorgu _ExchangeLog adında bir tablo oluşturmaya yarıyor..

-----------------------------------------------------------------------------------------------------------------------------------

Daha sonra yine aynı şekilde aşağıdaki sorguyu veritabanı isminizi ayarladıktan sonra çalıştırıyoruz..




USE [SRO_VT_SYSTEM] --- Veritabani ismi


GO

/****** Object: StoredProcedure [dbo].[_ExchangeLogSP] Script Date: 4.12.2023 10:48:22 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author: Hades

-- Create date: 04.12.2023

-- Description: Exchange log

-- =============================================

CREATE PROCEDURE [dbo].[_ExchangeLogSP]

@CharID INT,

@ItemRefID INT,

@ItemSerial BIGINT,

@dwData INT,

@TargetStorage TINYINT,

@Operation TINYINT,

@Slot_From TINYINT,

@Slot_To TINYINT,

@EventPos VARCHAR(64),

@strDesc VARCHAR(128),

@Gold BIGINT

AS

DECLARE @Charname VARCHAR(50) = (SELECT CharName16 FROM SRO_VT_SHARD.._Char WHERE CharID = @CharID),

@TargetCharID INT = (SELECT CharID FROM SRO_VT_SHARD.._Char WHERE CharName16 = @strDesc),

@CodeName128 VARCHAR(128) = (SELECT CodeName128 FROM SRO_VT_SHARD.._RefObjCommon WHERE ID = @ItemRefID),

@Message VARCHAR(MAX),

@ID64 INT = (SELECT ItemID FROM SRO_VT_SHARD.._Inventory WHERE CharID = @CharID AND Slot = @Slot_From)



IF @Operation IN (50,51)

BEGIN

INSERT INTO _ExchangeLog VALUES (@CharID,@Charname,@TargetCharID,@strDesc,'Exchange Request',@ItemSerial,@EventPos,GETDATE())

END

IF @Operation = 52

BEGIN

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,'Exchange Started',@ItemSerial,@EventPos,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

IF @Operation = 53

BEGIN

IF @dwData = 8

BEGIN

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,'Exchange Cancelled By '+@Charname+'',@ItemSerial,@EventPos,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

ELSE IF @dwData = 1

BEGIN

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,'Exchange Completed',@ItemSerial,@EventPos,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

ELSE

BEGIN

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,'Exchange Cancelled',@ItemSerial,@EventPos,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

END

IF @Operation = 54

BEGIN

SET @Message = FORMATMESSAGE('ID[%d] -- CodeName[%s] -- Quantity[%d] -- ID64[%d]',@ItemRefID,@CodeName128,@dwData,@ID64)

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,@Message,@ItemSerial,@strDesc,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

IF @Operation = 55

BEGIN

SET @Message = FORMATMESSAGE('ID[%d] -- CodeName[%s] -- Cancelled -- ID64[%d]',@ItemRefID,@CodeName128,@ID64)

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,@Message,@ItemSerial,@strDesc,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END

IF @Operation = 56

BEGIN

SET @Message = FORMATMESSAGE('Gold[%s] -- Updated',CAST(@Gold as NVARCHAR))

INSERT INTO _ExchangeLog SELECT TOP 1 @CharID,@Charname,TargetCharID,TargetCharname,@Message,@ItemSerial,@EventPos,GETDATE() FROM _ExchangeLog WHERE CharID = @CharID ORDER BY Idx DESC

END
--------------------------------------------------------------------------------------------------------------------------

Şimdi sırada SRO_VT_LOG -> _AddLogItem prosedürüne ekleme yapmamız gerekiyor.. Aşağıya bıraktığım kodu AS'tan sonraki kısma ekleyin..



BEGIN --- Veritabani ismini duzeltin


EXEC SRO_VT_SYSTEM.._ExchangeLogSP @CharID, @ItemRefID, @ItemSerial, @dwData, @TargetStorage, @Operation, @Slot_From, @Slot_To, @EventPos, @strDesc, @Gold

END

--------------------------------------------------------------------------------------------------------------------------

Kurulum bu kadar kolay temelde sistem bu şekilde sizde OperationID'ler ile oyun içinde gerçekleşen herhangi bir şeyin log'unu veya aksiyonunu alabilirsiniz..

[/HIDE]
 
Bununla oyunda scem yapanları mı bulabiliriz ?
 

Konu görüntüleyen kullanıcılar

Benzer konular

Geri
Üst