[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.
Ö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]
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]